Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Parameters.h	(revision 88)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Parameters.h	(revision 112)
@@ -34,10 +34,10 @@
   public : uint32_t   _nb_reg_free           ;
   public : uint32_t   _nb_bank               ;
-  public : uint32_t   _size_counter          ;
+//public : uint32_t   _size_counter          ;
 
 //public : uint32_t   _size_general_register ;
 //public : uint32_t   _size_special_register ;
 		      
-  public : uint32_t   _max_reader            ;
+//public : uint32_t   _max_reader            ;
   public : uint32_t   _nb_gpr_use_init       ;
   public : uint32_t   _nb_spr_use_init       ;
@@ -63,5 +63,5 @@
 			uint32_t   nb_reg_free           ,
 			uint32_t   nb_bank               ,
-			uint32_t   size_counter          ,
+// 			uint32_t   size_counter          ,
                         bool       is_toplevel=false
                         );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h	(revision 88)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h	(revision 112)
@@ -79,4 +79,5 @@
   public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_VAL               ;//[nb_inst_retire]
   public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_ACK               ;//[nb_inst_retire]
+  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE           ;//[nb_inst_retire]
   public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RA           ;//[nb_inst_retire]
   public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RA_PHY    ;//[nb_inst_retire]
@@ -110,8 +111,8 @@
   private   : stat_list_entry_t            ** spr_stat_list; //[nb_bank][nb_general_register_by_bank]
 
+  private   : uint32_t                        reg_GPR_PTR_FREE;
+  private   : uint32_t                        reg_SPR_PTR_FREE;
+
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  private   : uint32_t                        internal_GPR_PTR_FREE;
-  private   : uint32_t                        internal_SPR_PTR_FREE;
-
   private   : Tcontrol_t                    * internal_INSERT_ACK       ;//[nb_inst_insert]
   private   : Tcontrol_t                    * internal_RETIRE_ACK       ;//[nb_inst_retire]
@@ -154,5 +155,5 @@
   public  : void        transition                (void);
   public  : void        genMoore                  (void);
-  public  : void        genMealy                  (void);
+//public  : void        genMealy                  (void);
 #endif					       
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Types.h	(revision 88)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Types.h	(revision 112)
@@ -25,6 +25,6 @@
   public : bool     _is_free ; // set = is present in free list
   public : bool     _is_link ; // set = is present in rat
-  public : bool     _is_valid; // set = an instruction have write in this register
-  public : uint32_t _counter ; // number of register that must read this register
+//public : bool     _is_valid; // set = an instruction have write in this register
+//public : uint32_t _counter ; // number of register that must read this register
 
   public :  stat_list_entry_t (void) {};
@@ -35,42 +35,46 @@
       _is_free  = 0;
       _is_link  = is_link;
-      _is_valid = 1;
-      _counter  = 0;
+//    _is_valid = 1;
+//    _counter  = 0;
     }
 
-  public : void insert_read (void)
-    {
-      _counter ++;
-    }
+//   public : void insert_read (void)
+//     {
+//    _counter ++;
+//     }
+
   public : void insert_write (void)
     {
       _is_free  = 0;
       _is_link  = 1;
-      _is_valid = 0;
+//    _is_valid = 0;
     }
 
-  public : void retire_read (void)
+//   public : void retire_read (void)
+//     {
+//    _counter --;
+//     }
+
+  public : void retire_write_old (bool restore, bool restore_old)
     {
-      _counter --;
+      // restore restore_old is_link
+      // 0       x           0       - normal case : unallocate
+      // 1       0           0       - event and previous update
+      // 1       1           1       - event and first update
+      
+      _is_link = restore and restore_old;
     }
 
-  public : void retire_write_old (bool restore_old)
+  public : void retire_write_new (bool restore, bool restore_old)
     {
-      if (not restore_old)
-        {
-          _is_link  = 0;
-        }
-      // else nothing
-    }
+      // restore restore_old is_link
+      // 0       x           1       - normal case : allocate
+      // 1       x           0       - event, need restore oldest register
 
-  public : void retire_write_new (bool restore_old)
-    {
-      if (restore_old)
-        {
-          _is_link  = 0;
-        }
+      if (restore)
+        _is_link = 0;
 
       // in all case
-      _is_valid = 1;
+//    _is_valid = 1;
     }
 
@@ -80,15 +84,16 @@
     }
 
-  public : bool can_insert_read (uint32_t max_reader)
-    {
-      return ((_counter+1) < max_reader);
-    }
+//   public : bool can_insert_read (uint32_t max_reader)
+//     {
+//    return ((_counter+1) < max_reader);
+//     }
 
   public : bool can_free (void)
     {
       return ((_is_free  == 0) and
-	      (_is_link  == 0) and
-// 	      (_is_valid == 1) and // if is_link <- 0, then retire_write_old or reset
-	      (_counter  == 0));
+	      (_is_link  == 0) // and
+//  	      (_is_valid == 1) and // if is_link <- 0, then retire_write_old or reset
+// 	      (_counter  == 0)
+              );
     }
 
@@ -97,7 +102,8 @@
     {
       output << x._is_free  << " "
-             << x._is_link  << " "
-             << x._is_valid << " "
-             << x._counter;
+             << x._is_link  // << " "
+//           << x._is_valid  << " "
+//              << x._counter
+        ;
       
       return output;
