Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/Makefile.deps	(revision 141)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/Makefile.deps	(revision 142)
@@ -27,19 +27,21 @@
 					$(Behavioural_LIBRARY)	
 
-Commit_unit_DIR_LIBRARY		=	-L$(Commit_unit_DIR)/lib	\
-					$(Priority_DIR_LIBRARY)		\
-					$(Behavioural_DIR_LIBRARY)
-
 #-----[ Rules ]--------------------------------------------
 
-Commit_unit_library		:
+Commit_unit_library_only	:
+				@\
+				$(MAKE) --directory=$(Commit_unit_DIR) --makefile=Makefile;
+
+Commit_unit_library_clean_only	:
+				@\
+				$(MAKE) --directory=$(Commit_unit_DIR) --makefile=Makefile clean;
+
+Commit_unit_library		: Commit_unit_library_only
 				@\
 				$(MAKE) Behavioural_library;		\
-				$(MAKE) Priority_library;		\
-				$(MAKE) --directory=$(Commit_unit_DIR) --makefile=Makefile;
+				$(MAKE) Priority_library;
 
-Commit_unit_library_clean	:
+Commit_unit_library_clean	: Commit_unit_library_clean_only
 				@\
 				$(MAKE) Behavioural_library_clean;	\
-				$(MAKE) Priority_library_clean;		\
-				$(MAKE) --directory=$(Commit_unit_DIR) --makefile=Makefile clean;
+				$(MAKE) Priority_library_clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h	(revision 141)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h	(revision 142)
@@ -35,5 +35,4 @@
 namespace morpheo {
 namespace behavioural {
-
 namespace core {
 namespace multi_ooo_engine {
@@ -41,4 +40,7 @@
 namespace commit_unit {
 
+#ifdef STATISTICS
+  typedef std::map<uint32_t,uint32_t> stat_inst_fusion_t;
+#endif
 
   class Commit_unit 
@@ -71,4 +73,9 @@
   public    : counter_t                     ** _stat_nb_cycle_state_event         ;//[nb_thread]
   public    : counter_t                     ** _stat_nb_cycle_state_wait_end      ;//[nb_thread]
+
+// public    : uint32_t                       * _stat_last_inst                    ;//[nb_thread]
+  public    : uint32_t                       * _stat_last_inst_type               ;//[nb_thread]
+  public    : uint32_t                       * _stat_last_inst_operation          ;//[nb_thread]
+  public    : stat_inst_fusion_t             * _stat_inst_fusion                  ;//[nb_thread]
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_allocation.cpp	(revision 141)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_allocation.cpp	(revision 142)
@@ -8,4 +8,5 @@
 
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo {
@@ -169,20 +170,20 @@
       {
         _stat_nb_inst_insert [i] = _stat->create_counters("nb_inst_insert_"+toString(i),_param->_nb_inst_insert[i],"",
-                                                             _("Cycle number with %d instruction(s) included ")+toString(_("(rename_unit %d)."),i),
-                                                             _("Percent of cycle number with %d instruction(s) included ")+toString(_("(rename_unit %d)."),i),
-                                                             _("Average of instruction(s) included ")+toString(_("(rename_unit %d)."),i)
-                                                             );
+                                                          _("Cycle number with %d instruction(s) included ")+toString(_("(rename_unit %d)."),i),
+                                                          _("Percent of cycle number with %d instruction(s) included ")+toString(_("(rename_unit %d)."),i),
+                                                          _("Average of instruction(s) included ")+toString(_("(rename_unit %d)."),i)
+                                                          );
         
         _stat_nb_inst_retire [i] = _stat->create_counters("nb_inst_retire_"+toString(i),_param->_nb_inst_retire[i],"",
-                                                             _("Cycle number with %d instruction(s) removed ")+toString(_("(rename_unit %d)."),i),
-                                                             _("Percent of cycle number with %d instruction(s) removed ")+toString(_("(rename_unit %d)."),i),
-                                                             _("Average of instruction(s) removed ")+toString(_("(rename_unit %d)."),i)
-                                                             );
+                                                          _("Cycle number with %d instruction(s) removed ")+toString(_("(rename_unit %d)."),i),
+                                                          _("Percent of cycle number with %d instruction(s) removed ")+toString(_("(rename_unit %d)."),i),
+                                                          _("Average of instruction(s) removed ")+toString(_("(rename_unit %d)."),i)
+                                                          );
         
         _stat_nb_inst_commit [i] = _stat->create_counters("nb_inst_commit_"+toString(i),_param->_nb_inst_commit,"",
-                                                             _("Cycle number with %d instruction(s) commited ")+toString(_("(rename_unit %d)."),i),
-                                                             _("Percent of cycle number with %d instruction(s) commited ")+toString(_("(rename_unit %d)."),i),
-                                                             _("Average of instruction(s) commited "+toString(_("(rename_unit %d)."),i))
-                                                             );
+                                                          _("Cycle number with %d instruction(s) commited ")+toString(_("(rename_unit %d)."),i),
+                                                          _("Percent of cycle number with %d instruction(s) commited ")+toString(_("(rename_unit %d)."),i),
+                                                          _("Average of instruction(s) commited ")+toString(_("(rename_unit %d)."),i)
+                                                          );
 
         average_nb_inst_commit = "+ average_nb_inst_commit_"+toString(i) + " " + average_nb_inst_commit;
@@ -192,4 +193,17 @@
     _stat->create_expr_average_by_cycle("average_use_interface_commit_conflit_access","nb_inst_commit_conflit_access", "", _("Average access conflit by cycle on commit interface"));
     _stat->create_expr_percent         ("percent_use_interface_commit_conflit_access","average_use_interface_commit_conflit_access", average_nb_inst_commit, _("Percent access conflit on commit interface"));
+
+
+//  ALLOC1(_stat_last_inst          ,uint32_t          ,_param->_nb_thread);
+    ALLOC1(_stat_last_inst_type     ,uint32_t          ,_param->_nb_thread);
+    ALLOC1(_stat_last_inst_operation,uint32_t          ,_param->_nb_thread);
+    ALLOC1(_stat_inst_fusion        ,stat_inst_fusion_t,_param->_nb_thread);
+
+    for (uint32_t i=0; i<_param->_nb_thread; ++i)
+      {
+      //_stat_last_inst           [i] = INSTRUCTION_L_NOP;
+        _stat_last_inst_type      [i] = instruction_information(INSTRUCTION_L_NOP)._type     ;
+        _stat_last_inst_operation [i] = instruction_information(INSTRUCTION_L_NOP)._operation;
+      }
 
     log_end(Commit_unit,FUNCTION);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_deallocation.cpp	(revision 141)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_deallocation.cpp	(revision 142)
@@ -8,4 +8,6 @@
 
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h"
+#include "Behavioural/include/Allocation.h"
+#include "Common/include/BitManipulation.h"
 
 namespace morpheo {
@@ -41,4 +43,44 @@
     delete [] _stat_nb_inst_retire;
     delete [] _stat_nb_inst_commit;
+
+//  uint32_t mask_inst      = gen_mask<uint32_t>(SIZE_INSTRUCTION);
+    uint32_t mask_type      = gen_mask<uint32_t>(SIZE_TYPE       );
+    uint32_t mask_operation = gen_mask<uint32_t>(SIZE_OPERATION  );
+
+    for (uint32_t i=0; i<_param->_nb_thread; ++i)
+      for(stat_inst_fusion_t::iterator it = _stat_inst_fusion [i].begin();
+          it != _stat_inst_fusion [i].end();
+          ++it)
+        {
+          uint32_t value = it->second;
+
+          if (value != 0)
+            {
+              uint32_t inst = it->first;
+
+              type_t   type_0      = static_cast<type_t>((inst>>(SIZE_TYPE+2*SIZE_OPERATION))&mask_type     );
+              uint32_t operation_0 =                     (inst>>(SIZE_TYPE+  SIZE_OPERATION))&mask_operation ;
+              type_t   type_1      = static_cast<type_t>((inst>>(            SIZE_OPERATION))&mask_type     );
+              uint32_t operation_1 =                      inst                               &mask_operation ;
+
+              // log_printf(STAT,Commit_unit,FUNCTION,
+              msgInformation(
+                           //"  * %s - %s : %d\n"
+                           //,toString_instruction((inst>>SIZE_INSTRUCTION)&mask_inst).c_str()
+                           //,toString_instruction( inst                   &mask_inst).c_str(),value
+                             "  * %s.%s - %s.%s : %d\n"
+                             ,toString          (type_0            ).c_str()
+                             ,toString_operation(type_0,operation_0).c_str()
+                             ,toString          (type_1            ).c_str()
+                             ,toString_operation(type_1,operation_1).c_str()
+                             ,value
+                             );
+            }
+        }
+
+ // DELETE1(_stat_last_inst          ,_param->_nb_thread);
+    DELETE1(_stat_last_inst_type     ,_param->_nb_thread);
+    DELETE1(_stat_last_inst_operation,_param->_nb_thread);
+    DELETE1(_stat_inst_fusion        ,_param->_nb_thread);
         
     log_end(Commit_unit,FUNCTION);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp	(revision 141)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp	(revision 142)
@@ -770,11 +770,12 @@
                     can_continue = true;
 
-	            Tcontext_t  front_end_id = entry->front_end_id;
-	            Tcontext_t  context_id   = entry->context_id  ;
-	            uint32_t    num_thread   = _param->_translate_num_context_to_num_thread [front_end_id][context_id];
-	            rob_state_t state        = entry->state_old;
-	            Ttype_t     type         = entry->type        ;
-	            bool        retire_ok    = false;
-	            uint32_t    packet_id    = ((entry->ptr << _param->_shift_num_slot) | num_bank);
+	            Tcontext_t   front_end_id = entry->front_end_id;
+	            Tcontext_t   context_id   = entry->context_id  ;
+	            uint32_t     num_thread   = _param->_translate_num_context_to_num_thread [front_end_id][context_id];
+	            rob_state_t  state        = entry->state_old;
+	            Ttype_t      type         = entry->type        ;
+	            Toperation_t operation    = entry->operation   ;
+	            bool         retire_ok    = false;
+	            uint32_t     packet_id    = ((entry->ptr << _param->_shift_num_slot) | num_bank);
 	            
 	            log_printf(TRACE,Commit_unit,FUNCTION,"    * front_end_id : %d",front_end_id );
@@ -875,4 +876,16 @@
 	            	    (*_stat_nb_inst_instruction [instruction]) ++;
 	            	    (*_stat_nb_inst_type        [type]       ) ++;
+
+                          //uint32_t index = (_stat_last_inst [num_thread] << SIZE_INSTRUCTION) | instruction;
+                            uint32_t index = ((_stat_last_inst_type      [num_thread] << (SIZE_TYPE+2*SIZE_OPERATION)) |
+                                              (_stat_last_inst_operation [num_thread] << (SIZE_TYPE+  SIZE_OPERATION)) |
+                                              (                type                   << (            SIZE_OPERATION)) |
+                                              (                operation                                             ));
+
+                            _stat_inst_fusion [num_thread][index] ++;
+                            
+                          //_stat_last_inst           [num_thread] = instruction;
+                            _stat_last_inst_type      [num_thread] = type       ;
+                            _stat_last_inst_operation [num_thread] = operation  ;
 	            	  }
 	            	else
@@ -893,5 +906,5 @@
 			  << "{" << ((retire_ok)?"OK":"KO") << "} ";
 			
-			if ((type == TYPE_MEMORY) and  is_operation_memory_load(entry->operation))
+			if ((type == TYPE_MEMORY) and  is_operation_memory_load(operation))
 			  instruction_log_file [num_thread] << std::hex << entry->load_data << std::dec;
 			
