Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp	(revision 123)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp	(revision 139)
@@ -94,14 +94,36 @@
           log_printf(TRACE,Stat_List_unit,FUNCTION,"  * nb_spr_free : stat_list %d - free_list %d - free %d, link %d (%d), use %d (%d)",stat_list_nb_spr_free,free_list_nb_spr_free,nb_spr_free,nb_spr_link,stat_list_nb_spr_link,nb_spr_use,stat_list_nb_spr_use);
 
-          if (free_list_nb_gpr_free != stat_list_nb_gpr_free)
-            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list.\n"),stat_list_nb_gpr_free,free_list_nb_gpr_free));
-          if (free_list_nb_spr_free != stat_list_nb_spr_free)
-            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list.\n"),stat_list_nb_spr_free,free_list_nb_spr_free));
-
-          if (PORT_READ(in_INFO_ROB_EMPTY) and (nb_gpr_free != _nb_gpr_free))
-            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d general registers free or can_free and must be %d registers."),nb_gpr_free,_nb_gpr_free));
-
-          if (PORT_READ(in_INFO_ROB_EMPTY) and (nb_spr_free != _nb_spr_free))
-            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d special registers free or can_free and must be %d registers."),nb_spr_free,_nb_spr_free));
+          bool error_nb_gpr_free     = (free_list_nb_gpr_free != stat_list_nb_gpr_free);
+          bool error_nb_spr_free     = (free_list_nb_spr_free != stat_list_nb_spr_free);
+          bool error_rob_nb_gpr_free = (PORT_READ(in_INFO_ROB_EMPTY) and (nb_gpr_free != _nb_gpr_free));
+          bool error_rob_nb_spr_free = (PORT_READ(in_INFO_ROB_EMPTY) and (nb_spr_free != _nb_spr_free));
+
+          std::string list_gpr_not_free;
+          std::string list_spr_not_free;
+
+
+          if (error_nb_gpr_free or
+              error_rob_nb_gpr_free)
+            for (uint32_t i=0; i<_param->_nb_bank; i++)
+              for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
+                if (not gpr_stat_list [i][j]._is_free)
+                  list_gpr_not_free+=toString((i<<_param->_shift_gpr)|j)+" ";   
+
+          if (error_nb_spr_free or
+              error_rob_nb_spr_free)
+            for (uint32_t i=0; i<_param->_nb_bank; i++)
+              for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
+                if (not spr_stat_list [i][j]._is_free)
+                  list_spr_not_free+=toString((i<<_param->_shift_spr)|j)+" ";   
+
+          if (error_nb_gpr_free)
+            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list. (GPR not free : %s)\n"),stat_list_nb_gpr_free,free_list_nb_gpr_free,list_gpr_not_free.c_str()));
+          if (error_nb_spr_free)
+            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list. (SPR not free : %s)\n"),stat_list_nb_spr_free,free_list_nb_spr_free,list_spr_not_free.c_str()));
+          if (error_rob_nb_gpr_free)
+            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d general registers free or can_free and must be %d registers. (GPR not free : %s)"),nb_gpr_free,_nb_gpr_free,list_gpr_not_free.c_str()));
+
+          if (error_rob_nb_spr_free)
+            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d special registers free or can_free and must be %d registers. (SPR not free : %s)"),nb_spr_free,_nb_spr_free,list_gpr_not_free.c_str()));
         }
 #endif
