Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h	(revision 141)
@@ -56,5 +56,5 @@
 #ifdef STATISTICS
   public    : Stat                           * _stat;
-  public    : counter_t                      * _stat_sum_inst_decod;
+  public    : counters_t                     * _stat_nb_inst_decod;
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_statistics_allocation.cpp	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_statistics_allocation.cpp	(revision 141)
@@ -28,9 +28,9 @@
 		      param_statistics);
 
-    _stat_sum_inst_decod = _stat->create_variable("sum_inst_decod");
-    
-    
-    _stat->create_expr_average_by_cycle ("average_nb_inst_decod","sum_inst_decod","","Average of decod instruction by cycle");
-    _stat->create_expr_percent          ("percent_nb_inst_decod","average_nb_inst_decod", toString(_param->_nb_inst_decod), "Percent of decod instruction by cycle");
+    _stat_nb_inst_decod = _stat->create_counters("nb_inst_decod",_param->_nb_inst_decod,"",
+                                                 _("Cycle number with %d decoded instruction(s)."),
+                                                 _("Percent of cycle number with %d decoded instruction(s)."),
+                                                 _("Average of decoded instructions.")
+                                                 );
  
     log_printf(FUNC,Decod,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_transition.cpp	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_transition.cpp	(revision 141)
@@ -53,7 +53,11 @@
 #ifdef STATISTICS
         if (usage_is_set(_usage,USE_STATISTICS))
-          for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
-            if (internal_DECOD_VAL [i] and PORT_READ(in_DECOD_ACK[i]))
-              (*_stat_sum_inst_decod) ++;
+          {
+            uint32_t stat_nb_inst_decod = 0;
+            for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+              if (internal_DECOD_VAL [i] and PORT_READ(in_DECOD_ACK[i]))
+                stat_nb_inst_decod ++;
+            (*_stat_nb_inst_decod) += stat_nb_inst_decod;
+          }
 #endif
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h	(revision 141)
@@ -55,8 +55,8 @@
   private   : counter_t                      * _sum_use_queue_error_wait_rsp;
 
-  private   : counter_t                      * _sum_inst_enable;
   private   : counter_t                      * _sum_transaction_address;
 
-  private   : counter_t                      * _average_occupation_bundle;
+  private   : counters_t                     * _stat_nb_inst_fetch;
+    
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_function_full_assoc_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_function_full_assoc_transition.cpp	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_function_full_assoc_transition.cpp	(revision 141)
@@ -51,4 +51,8 @@
 	// =====[ ADDRESS ]==========================================
 	// ==========================================================
+#ifdef STATISTICS
+        uint32_t stat_nb_inst_fetch=0;
+#endif
+
 	if (PORT_READ(in_ADDRESS_VAL) and internal_ADDRESS_ACK)
 	  {
@@ -70,6 +74,5 @@
 		Tcontrol_t enable = PORT_READ(in_ADDRESS_INSTRUCTION_ENABLE [i]);
 #ifdef STATISTICS
-                if (usage_is_set(_usage,USE_STATISTICS))
-                  (*_sum_inst_enable) += enable;
+                stat_nb_inst_fetch+=enable;
 #endif
 		_queue[reg_PTR_WRITE]->_instruction_enable [i]      = enable;
@@ -83,4 +86,10 @@
 	    reg_PTR_WRITE = (reg_PTR_WRITE+1)%_param->_size_queue;
 	  }
+
+#ifdef STATISTICS
+        if (usage_is_set(_usage,USE_STATISTICS))
+          (*_stat_nb_inst_fetch)+=stat_nb_inst_fetch;
+#endif
+
 
 	// ==========================================================
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_function_no_assoc_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_function_no_assoc_transition.cpp	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_function_no_assoc_transition.cpp	(revision 141)
@@ -51,4 +51,8 @@
 	// =====[ ADDRESS ]==========================================
 	// ==========================================================
+#ifdef STATISTICS
+        uint32_t stat_nb_inst_fetch=0;
+#endif
+
 	if (PORT_READ(in_ADDRESS_VAL) and internal_ADDRESS_ACK)
 	  {
@@ -70,6 +74,5 @@
 		Tcontrol_t enable = PORT_READ(in_ADDRESS_INSTRUCTION_ENABLE [i]);
 #ifdef STATISTICS
-                if (usage_is_set(_usage,USE_STATISTICS))
-                  (*_sum_inst_enable) += enable;
+                 stat_nb_inst_fetch += enable;
 #endif
 		_queue[reg_PTR_WRITE]->_instruction_enable [i]      = enable;
@@ -83,4 +86,8 @@
 	    reg_PTR_WRITE = (reg_PTR_WRITE+1)%_param->_size_queue;
 	  }
+#ifdef STATISTICS
+        if (usage_is_set(_usage,USE_STATISTICS))
+          (*_stat_nb_inst_fetch) += stat_nb_inst_fetch;
+#endif
 
 	// ==========================================================
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_statistics_allocation.cpp	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_statistics_allocation.cpp	(revision 141)
@@ -34,10 +34,5 @@
     _sum_use_queue_have_rsp       = _stat->create_variable("sum_use_queue_have_rsp");
     _sum_use_queue_error_wait_rsp = _stat->create_variable("sum_use_queue_error_wait_rsp");
-    _sum_inst_enable              = _stat->create_variable("sum_inst_enable");
 
-    _average_occupation_bundle    = _stat->create_counter ("average_occupation_bundle", "", "Occupation average of instruction's bundle.");
-
-    _stat->create_expr                 ("average_occupation_bundle" ,"/ sum_inst_enable sum_transaction_address");
-    _stat->create_expr_percent         ("percent_occupation_bundle" ,"average_occupation_bundle", toString(_param->_nb_instruction),"Percent of instruction's bundle occupation.");
     _stat->create_expr                 ("sum_use_queue"             ,"+ + sum_use_queue_wait_rsp sum_use_queue_have_rsp sum_use_queue_error_wait_rsp");
     _stat->create_expr_average_by_cycle("average_use_queue"               ,"sum_use_queue"               ,"","Average occupation of ifetch queue");
@@ -48,4 +43,10 @@
 
     _stat->create_expr_average         ("average_miss_icache"             ,"+ sum_use_queue_wait_rsp sum_use_queue_error_wait_rsp", "sum_transaction_address", "", "Average Miss Instruction Cache");
+
+    _stat_nb_inst_fetch     = _stat->create_counters("nb_inst_fetch",_param->_nb_instruction,"",
+                                                     _("Number bundle with %d instruction(s)."),
+                                                     _("Percent of bundle with %d instruction(s)."),
+                                                     _("Average instruction in a bundle.")
+                                                     );
 
     log_printf(FUNC,Ifetch_queue,FUNCTION,"End");
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 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h	(revision 141)
@@ -55,7 +55,9 @@
 #ifdef STATISTICS
   public    : Stat                           * _stat;
-  public    : counter_t                     ** _stat_nb_inst_insert               ;//[nb_rename_unit]
-  public    : counter_t                     ** _stat_nb_inst_retire               ;//[nb_rename_unit]
-  public    : counter_t                      * _stat_nb_inst_commit               ;
+
+  public    : counters_t                    ** _stat_nb_inst_insert               ;//[nb_rename_unit]
+  public    : counters_t                    ** _stat_nb_inst_retire               ;//[nb_rename_unit]
+  public    : counters_t                    ** _stat_nb_inst_commit               ;//[nb_rename_unit]
+
   public    : counter_t                      * _stat_nb_inst_commit_conflit_access;
   public    : counter_t                     ** _stat_nb_inst_retire_ok            ;//[nb_thread]
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 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_allocation.cpp	(revision 141)
@@ -48,6 +48,4 @@
     }
 
-    _stat_nb_inst_insert         = new counter_t * [_param->_nb_rename_unit];
-    _stat_nb_inst_retire         = new counter_t * [_param->_nb_rename_unit];
     _stat_nb_inst_retire_ok      = new counter_t * [_param->_nb_thread];
     _stat_nb_inst_retire_ko      = new counter_t * [_param->_nb_thread];
@@ -55,26 +53,4 @@
     _stat_nb_inst_type           = new counter_t * [_param->_nb_type];
     _stat_bank_nb_inst           = new counter_t * [_param->_nb_bank];
-
-    {
-      std::string sum_nb_inst_insert    = "0";
-      std::string sum_nb_inst_retire    = "0";
-
-      for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
-	{
-	  _stat_nb_inst_insert    [i] = _stat->create_variable("nb_inst_insert_"   +toString(i));
-	  _stat_nb_inst_retire    [i] = _stat->create_variable("nb_inst_retire_"   +toString(i));
-	  
-	  _stat->create_expr_average_by_cycle("average_use_interface_insert_"+toString(i), "nb_inst_insert_"+toString(i), "", toString(_("Average instruction by cycle on insert interface (rename_unit %d)"),i));
-	  _stat->create_expr_average_by_cycle("average_use_interface_retire_"+toString(i), "nb_inst_retire_"+toString(i), "", toString(_("Average instruction by cycle on retire interface (rename_unit %d)"),i));
-	  _stat->create_expr_percent         ("percent_use_interface_insert_"+toString(i) , "average_use_interface_insert_"+toString(i), toString(_param->_nb_inst_insert [i]), toString(_("Percent usage of insert interface (rename_unit %d)"),i));
-	  _stat->create_expr_percent         ("percent_use_interface_retire_"+toString(i) , "average_use_interface_retire_"+toString(i), toString(_param->_nb_inst_retire [i]), toString(_("Percent usage of retire interface (rename_unit %d)"),i));
-
-          sum_nb_inst_insert    = "+ nb_inst_insert_"+   toString(i) + " " +sum_nb_inst_insert;
-          sum_nb_inst_retire    = "+ nb_inst_retire_"+   toString(i) + " " +sum_nb_inst_retire;
-        }
-
-      _stat->create_expr_average_by_cycle("average_inst_insert"   , sum_nb_inst_insert   , "", _("Average instruction insert by cycle"));
-      _stat->create_expr_average_by_cycle("average_inst_retire"   , sum_nb_inst_retire   , "", _("Average instruction retire by cycle"));
-    }
 
     {
@@ -163,12 +139,4 @@
 	}
     }
-
-    _stat_nb_inst_commit = _stat->create_variable("nb_inst_commit");
-    _stat->create_expr_average_by_cycle("average_use_interface_commit","nb_inst_commit", "", _("Average instruction by cycle on commit interface"));
-    _stat->create_expr_percent         ("percent_use_interface_commit", "average_use_interface_commit", toString(_param->_nb_inst_commit), _("Percent usage of commit interface"));
-
-    _stat_nb_inst_commit_conflit_access = _stat->create_variable("nb_inst_commit_conflit_access");
-    _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_use_interface_commit", _("Percent access conflit on commit interface"));
 
     // bank/queue occupation
@@ -192,4 +160,36 @@
     }
 
+    _stat_nb_inst_insert         = new counters_t * [_param->_nb_rename_unit];
+    _stat_nb_inst_retire         = new counters_t * [_param->_nb_rename_unit];
+    _stat_nb_inst_commit         = new counters_t * [_param->_nb_rename_unit];
+
+    std::string average_nb_inst_commit = "0";
+    
+    for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
+      {
+        _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)
+                                                             );
+        
+        _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)
+                                                             );
+        
+        _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))
+                                                             );
+
+        average_nb_inst_commit = "+ average_nb_inst_commit_"+toString(i) + " " + average_nb_inst_commit;
+      }
+
+    _stat_nb_inst_commit_conflit_access = _stat->create_variable("nb_inst_commit_conflit_access");
+    _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"));
 
     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 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_deallocation.cpp	(revision 141)
@@ -27,6 +27,4 @@
     delete _stat;
 
-    delete [] _stat_nb_inst_insert;
-    delete [] _stat_nb_inst_retire;
     delete [] _stat_nb_inst_retire_ok;
     delete [] _stat_nb_inst_retire_ko;
@@ -40,5 +38,8 @@
     delete [] _stat_nb_cycle_state_wait_end      ;
 
-    
+    delete [] _stat_nb_inst_insert;
+    delete [] _stat_nb_inst_retire;
+    delete [] _stat_nb_inst_commit;
+        
     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 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp	(revision 141)
@@ -89,4 +89,18 @@
     else
       {
+#ifdef STATISTICS
+        uint32_t stat_nb_inst_insert [_param->_nb_rename_unit];
+        uint32_t stat_nb_inst_retire [_param->_nb_rename_unit];
+        uint32_t stat_nb_inst_commit [_param->_nb_rename_unit];
+        
+        if (usage_is_set(_usage,USE_STATISTICS))
+          for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
+            {
+              stat_nb_inst_insert [i] = 0;
+              stat_nb_inst_retire [i] = 0;
+              stat_nb_inst_commit [i] = 0;
+            }
+#endif
+
         // Increase number idle cycle
 	for (uint32_t i=0; i<_param->_nb_front_end; i++)
@@ -354,5 +368,5 @@
 #ifdef STATISTICS
                       if (usage_is_set(_usage,USE_STATISTICS))
-                        (*_stat_nb_inst_insert [x]) ++;
+                        stat_nb_inst_insert [x] ++;
 #endif
                     
@@ -433,14 +447,13 @@
 		  {
 		    log_printf(TRACE,Commit_unit,FUNCTION,"  * COMMIT            [%d]",x);
+		    log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank              : %d",i);
+
+		    // find the good entry !!!
+		    entry_t *       entry        = internal_BANK_COMMIT_ENTRY [i][j];
 
 #ifdef STATISTICS
                     if (usage_is_set(_usage,USE_STATISTICS))
-                      (*_stat_nb_inst_commit) ++;
+                      stat_nb_inst_commit [entry->rename_unit_id] ++;
 #endif
-
-		    log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank              : %d",i);
-
-		    // find the good entry !!!
-		    entry_t *       entry        = internal_BANK_COMMIT_ENTRY [i][j];
 
 		    log_printf(TRACE,Commit_unit,FUNCTION,"    * ptr                   : %d",entry->ptr);
@@ -720,5 +733,5 @@
 #ifdef STATISTICS
                 if (usage_is_set(_usage,USE_STATISTICS))
-                  (*_stat_nb_inst_retire [x]) ++;
+                  stat_nb_inst_retire [x] ++;
 #endif
                 
@@ -1290,4 +1303,11 @@
                 }
             }
+
+        for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
+          {
+            (*_stat_nb_inst_insert [i]) += stat_nb_inst_insert [i];
+            (*_stat_nb_inst_retire [i]) += stat_nb_inst_retire [i];
+            (*_stat_nb_inst_commit [i]) += stat_nb_inst_commit [i];
+          }
       }
 #endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_statistics_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_statistics_declaration.cpp	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_statistics_declaration.cpp	(revision 141)
@@ -23,20 +23,20 @@
     if (_param->_nb_port_read>0)
     _stat_port_read         = _stat->create_counters("port_read",_param->_nb_port_read,"",
-                                                     _("Usage of read port %d."),
-                                                     _("Percent of usage read port %d."),
-                                                     _("Average of usage read port.")
+                                                     _("Cycle number cycle with %d read(s)."),
+                                                     _("Percent of cycle number cycle with %d read(s)."),
+                                                     _("Average of read per cycle.")
                                                      );
 
     if (_param->_nb_port_write>0)
     _stat_port_write        = _stat->create_counters("port_write",_param->_nb_port_write,"",
-                                                     _("Usage of write port %d."),
-                                                     _("Percent of usage write port %d."),
-                                                     _("Average of usage write port.")
+                                                     _("Cycle number cycle with %d write(s)."),
+                                                     _("Percent of cycle number cycle with %d write(s)."),
+                                                     _("Average of write per cycle.")
                                                      );
     if (_param->_nb_port_read_write>0)
     _stat_port_read_write   = _stat->create_counters("port_read_write",_param->_nb_port_read_write,"",
-                                                     _("Usage of read_write port."),
-                                                     _("Percent of usage read_write port %d."),
-                                                     _("Average of usage read_write port.")
+                                                     _("Cycle number cycle with %d read_write(s)."),
+                                                     _("Percent of cycle number cycle with %d read_write(s)."),
+                                                     _("Average of read_write per cycle.")
                                                      );
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Operation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Operation.h	(revision 140)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Operation.h	(revision 141)
@@ -12,13 +12,14 @@
 namespace behavioural {
 
-#define neg(size,data)             (~(data)+1)
-#define sign(size,data)            ((data)>>(size-1))
-#define unsigned(size,data)        (data)
-#define signed(size,data)          ((sign(size,data)==0)?(data):neg(size,data))
-#define ovf(size,op1, op2, res)    ((sign(size,op1) == sign(size,op2))?(sign(size,op1) xor sign(size,res)):0)
-#define carry(size,op1, op2, res)  (((res)<(op1)) or ((res)<(op2)))
-#define set_flag(data,flag,is_set) (((is_set)==1)?((data)|(flag)):((data)&~(flag)))
-#define get_flag(data,flag)	   (((data)&(flag))!=0)
-#define concatenation_bool(a,b)    (((a)<<1) | (b))
+#  define neg(     size,data)           (~(data)+1)
+#  define sign(    size,data)           ((data)>>(size-1))
+#  define unsigned(size,data)           (data)
+#  define signed(  size,data)           ((sign(size,data)==0)?(data):neg(size,data))
+//#define ovf(     size,op1, op2, c_in) ((op2^(op1+op2+c_in))&~(op1^op2))>>(size-1);
+#  define ovf(     size,op1, op2, res)  ((sign(size,op1) == sign(size,op2))?(sign(size,op1) xor sign(size,res)):0)
+#  define carry(   size,op1, op2, res)  (((res)<(op1)) or ((res)<(op2)))
+#  define set_flag(data,flag,is_set)    (((is_set)==1)?((data)|(flag)):((data)&~(flag)))
+#  define get_flag(data,flag)	        (((data)&(flag))!=0)
+#  define concatenation_bool(a,b)       (((a)<<1) | (b))
 
 }; // end namespace behavioural
Index: trunk/Platforms/Test/data/debug/debug.cfg
===================================================================
--- trunk/Platforms/Test/data/debug/debug.cfg	(revision 140)
+++ trunk/Platforms/Test/data/debug/debug.cfg	(revision 141)
@@ -2,5 +2,5 @@
 ${MORPHEO_TOPLEVEL}/IPs/systemC/processor/Morpheo/Files/Morpheo.gen
 ${MORPHEO_TOPLEVEL}/IPs/systemC/processor/Morpheo/Files/debug.cfg
-${MORPHEO_TOPLEVEL}/Softwares/Test/Test_009/bin/soft_NEWLIB_MORPHEO.x
+${MORPHEO_TOPLEVEL}/Softwares/Test/Test_074/bin/soft_NEWLIB_MORPHEO.x
 0
 0
Index: trunk/Softwares/Test/Test_010/src/sys/crt0.s
===================================================================
--- trunk/Softwares/Test/Test_010/src/sys/crt0.s	(revision 140)
+++ trunk/Softwares/Test/Test_010/src/sys/crt0.s	(revision 141)
@@ -37,22 +37,37 @@
 _start:
         /*
-             A (r1)     B (r2)     - D (r3 wait)CY OV (SR = r6, mask SR = r5)
-                                       (r4)                (r7)
-          1) 0x00000000 0x00000000 - 0x00000000 0  0
-          2) 0x14011959 0x25071959 - 0x390832b2 0  0
-          3) 0xebfee6a7 0xdaf8e6a7 - 0xc6f7cd4e 1  0
-          4) 0xebfee6a7 0x25071959 - 0x11060001 1  0
-          5) 0x14011959 0xdaf8e6a7 - 0xeefa0001 0  0
-          6) 0x87654321 0xabcdef01 - 0x33333222 1  1
-          7) 0x789abcde 0x08765432 - 0x81111111 0  1
-          */
+             A (r1)     B (r2)     CY - D (r3 wait)CY OV (SR = r6, mask SR = r5)
+                                          (r4)                (r7)
+          1) 0x00000000 0x00000000 0  - 0x00000000 0  0
+             0x00000000 0x00000000 1  - 0x00000001 0  0
+          2) 0x14011959 0x25071959 0  - 0x390832b2 0  0
+             0x14011959 0x25071959 1  - 0x390832b3 0  0
+          3) 0xebfee6a7 0xdaf8e6a7 0  - 0xc6f7cd4e 1  0
+             0xebfee6a7 0xdaf8e6a7 1  - 0xc6f7cd4f 1  0
+          4) 0xebfee6a7 0x25071959 0  - 0x11060000 1  0
+             0xebfee6a7 0x25071959 1  - 0x11060001 1  0
+          5) 0x14011959 0xdaf8e6a7 0  - 0xeefa0000 0  0
+             0x14011959 0xdaf8e6a7 1  - 0xeefa0001 0  0
+          6) 0x87654321 0xabcdef01 0  - 0x33333222 1  1
+             0x87654321 0xabcdef01 1  - 0x33333223 1  1
+          7) 0x789abcde 0x08765432 0  - 0x81111110 0  1
+             0x789abcde 0x08765432 1  - 0x81111111 0  1
+          8) 0xffffffff 0x00000000 0  - 0xffffffff 0  0
+             0xffffffff 0x00000000 1  - 0x00000000 1  0
+          9) 0x7fffffff 0x00000000 0  - 0x7fffffff 0  0
+             0x7fffffff 0x00000000 1  - 0x80000000 0  1
+
+        */
 
         /* Mask to read OV (SR[11]), CY (SR[10]) and not F (SR[9]) */
 	l.movhi r5,     hi(0x00000c00)
 	l.ori   r5, r5, lo(0x00000c00)
+	l.movhi r8,     hi(0x80000000)
+	l.ori   r8, r8, lo(0x80000000)
         
         /**********/
         /* Test 1 */
         /**********/
+        l.add   r0,r0,r0               /* unset carry */
 	l.movhi r1,     hi(0x00000000) /* RA */
 	l.ori   r1, r1, lo(0x00000000)
@@ -79,7 +94,29 @@
         l.nop
 
+        l.add   r0,r8,r8               /* set carry */
+	l.movhi r3,     hi(0x00000001) /* RD wait */
+	l.ori   r3, r3, lo(0x00000001)
+	l.movhi r6,     hi(0x00000000) /* SR wait */
+	l.ori   r6, r6, lo(0x00000000)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+        
         /**********/
         /* Test 2 */
         /**********/
+        l.add   r0,r0,r0               /* unset carry */
 	l.movhi r1,     hi(0x14011959) /* RA */
 	l.ori   r1, r1, lo(0x14011959)
@@ -106,7 +143,29 @@
         l.nop
 
+        l.add   r0,r8,r8               /* set carry */
+	l.movhi r3,     hi(0x390832b3) /* RD wait */
+	l.ori   r3, r3, lo(0x390832b3)
+	l.movhi r6,     hi(0x00000000) /* SR wait */
+	l.ori   r6, r6, lo(0x00000000)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+        
         /**********/
         /* Test 3 */
         /**********/
+        l.add   r0,r0,r0               /* unset carry */
 	l.movhi r1,     hi(0xebfee6a7) /* RA */
 	l.ori   r1, r1, lo(0xebfee6a7)
@@ -133,11 +192,54 @@
         l.nop
 
+        l.add   r0,r8,r8               /* set carry */
+	l.movhi r3,     hi(0xc6f7cd4f) /* RD wait */
+	l.ori   r3, r3, lo(0xc6f7cd4f)
+	l.movhi r6,     hi(0x00000400) /* SR wait */
+	l.ori   r6, r6, lo(0x00000400)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+        
         /**********/
         /* Test 4 */
         /**********/
+        l.add   r0,r0,r0               /* unset carry */
 	l.movhi r1,     hi(0xebfee6a7) /* RA */
 	l.ori   r1, r1, lo(0xebfee6a7)
 	l.movhi r2,     hi(0x25071959) /* RB */
 	l.ori   r2, r2, lo(0x25071959)
+	l.movhi r3,     hi(0x11060000) /* RD wait */
+	l.ori   r3, r3, lo(0x11060000)
+	l.movhi r6,     hi(0x00000400) /* SR wait */
+	l.ori   r6, r6, lo(0x00000400)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+
+        l.add   r0,r8,r8               /* set carry */
 	l.movhi r3,     hi(0x11060001) /* RD wait */
 	l.ori   r3, r3, lo(0x11060001)
@@ -159,12 +261,34 @@
         l.bnf   _end_ko
         l.nop
-
+        
         /**********/
         /* Test 5 */
         /**********/
+        l.add   r0,r0,r0               /* unset carry */
 	l.movhi r1,     hi(0x14011959) /* RA */
 	l.ori   r1, r1, lo(0x14011959)
 	l.movhi r2,     hi(0xdaf8e6a7) /* RB */
 	l.ori   r2, r2, lo(0xdaf8e6a7)
+	l.movhi r3,     hi(0xeefa0000) /* RD wait */
+	l.ori   r3, r3, lo(0xeefa0000)
+	l.movhi r6,     hi(0x00000000) /* SR wait */
+	l.ori   r6, r6, lo(0x00000000)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+
+        l.add   r0,r8,r8               /* set carry */
 	l.movhi r3,     hi(0xeefa0001) /* RD wait */
 	l.ori   r3, r3, lo(0xeefa0001)
@@ -186,8 +310,9 @@
         l.bnf   _end_ko
         l.nop
-
+        
         /**********/
         /* Test 6 */
         /**********/
+        l.add   r0,r0,r0               /* unset carry */
 	l.movhi r1,     hi(0x87654321) /* RA */
 	l.ori   r1, r1, lo(0x87654321)
@@ -214,11 +339,54 @@
         l.nop
 
+        l.add   r0,r8,r8               /* set carry */
+	l.movhi r3,     hi(0x33333223) /* RD wait */
+	l.ori   r3, r3, lo(0x33333223)
+	l.movhi r6,     hi(0x00000c00) /* SR wait */
+	l.ori   r6, r6, lo(0x00000c00)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+
         /**********/
         /* Test 7 */
         /**********/
+        l.add   r0,r0,r0               /* unset carry */
 	l.movhi r1,     hi(0x789abcde) /* RA */
 	l.ori   r1, r1, lo(0x789abcde)
 	l.movhi r2,     hi(0x08765432) /* RB */
 	l.ori   r2, r2, lo(0x08765432)
+	l.movhi r3,     hi(0x81111110) /* RD wait */
+	l.ori   r3, r3, lo(0x81111110)
+	l.movhi r6,     hi(0x00000800) /* SR wait */
+	l.ori   r6, r6, lo(0x00000800)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+
+        l.add   r0,r8,r8               /* unset carry */
 	l.movhi r3,     hi(0x81111111) /* RD wait */
 	l.ori   r3, r3, lo(0x81111111)
@@ -242,4 +410,102 @@
         
         /**********/
+        /* Test 8 */
+        /**********/
+        l.add   r0,r0,r0               /* unset carry */
+	l.movhi r1,     hi(0xffffffff) /* RA */
+	l.ori   r1, r1, lo(0xffffffff)
+	l.movhi r2,     hi(0x00000000) /* RB */
+	l.ori   r2, r2, lo(0x00000000)
+	l.movhi r3,     hi(0xffffffff) /* RD wait */
+	l.ori   r3, r3, lo(0xffffffff)
+	l.movhi r6,     hi(0x00000000) /* SR wait */
+	l.ori   r6, r6, lo(0x00000000)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+
+        l.add   r0,r8,r8               /* unset carry */
+	l.movhi r3,     hi(0x00000000) /* RD wait */
+	l.ori   r3, r3, lo(0x00000000)
+	l.movhi r6,     hi(0x00000400) /* SR wait */
+	l.ori   r6, r6, lo(0x00000400)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+        
+        /**********/
+        /* Test 9 */
+        /**********/
+        l.add   r0,r0,r0               /* unset carry */
+	l.movhi r1,     hi(0x7fffffff) /* RA */
+	l.ori   r1, r1, lo(0x7fffffff)
+	l.movhi r2,     hi(0x00000000) /* RB */
+	l.ori   r2, r2, lo(0x00000000)
+	l.movhi r3,     hi(0x7fffffff) /* RD wait */
+	l.ori   r3, r3, lo(0x7fffffff)
+	l.movhi r6,     hi(0x00000000) /* SR wait */
+	l.ori   r6, r6, lo(0x00000000)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+
+        l.add   r0,r8,r8               /* unset carry */
+	l.movhi r3,     hi(0x80000000) /* RD wait */
+	l.ori   r3, r3, lo(0x80000000)
+	l.movhi r6,     hi(0x00000800) /* SR wait */
+	l.ori   r6, r6, lo(0x00000800)
+        
+        l.addc   r4, r1, r2
+
+        /* Test flag */
+        l.mfspr r7, r0, 17
+        l.and   r7, r7, r5
+
+        l.sfeq  r6, r7
+        l.bnf   _end_ko
+        l.nop
+
+        /* Test result */
+        l.sfeq  r3, r4
+        l.bnf   _end_ko
+        l.nop
+
+        /**********/
         /* End */
         /**********/
Index: trunk/Version
===================================================================
--- trunk/Version	(revision 140)
+++ trunk/Version	(revision 141)
@@ -1,1 +1,1 @@
-0 2 140 Castor 02 08 2010
+0 2 141 Castor 02 08 2010
