Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/include/Operation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/include/Operation.h	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/include/Operation.h	(revision 101)
@@ -28,8 +28,8 @@
   void operation_l_addc          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
   void operation_l_sub           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
-//void operation_l_mul           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
-//void operation_l_mulu          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
-//void operation_l_div           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
-//void operation_l_divu          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_mul           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_mulu          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_div           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_divu          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
   void operation_l_and           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
   void operation_l_or            (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/src/Operation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/src/Operation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/src/Operation.cpp	(revision 101)
@@ -90,5 +90,7 @@
 
     bool            overflow  = ovf  (param->_size_data,gpr1,gpr2,gpr3);
-    bool            carry_out = carry(param->_size_data,gpr1,gpr2,gpr3);
+//  bool            carry_out = carry(param->_size_data,gpr1,gpr2,gpr3);
+    // In ISA : l.sub don't change flag carry
+    bool            carry_out  = get_flag(op->_data_rc,FLAG_CY);
 
     // Result
@@ -104,4 +106,126 @@
 
 #undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_mul"
+  void operation_l_mul         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_mul");
+
+    Tgeneral_data_t gpr1      = unsigned(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3      ;
+    bool            overflow  ;
+    bool            carry_out ;
+
+    if (param->_size_data == 32)
+      {
+        int64_t res = static_cast<int64_t>(gpr1) * static_cast<int64_t>(gpr2);
+
+        log_printf(TRACE,Functionnal_unit,FUNCTION,"  * res   : %llx",res);
+
+        gpr3      = param->_mask_data & static_cast<Tgeneral_data_t>(res);
+        carry_out = res != gpr3; 
+        overflow  = carry_out;
+      }
+    else
+      {
+        throw ERRORMORPHEO(FUNCTION,_("64 bits multiplcation : not yet implemented\n"));
+      }
+
+    // Result
+    op->_timing       = param->_timing[op->_type][op->_operation];
+    op->_data_rd      = gpr3;
+    op->_data_re      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_OV,overflow );
+    op->_data_re      = set_flag(op->_data_re,FLAG_CY,carry_out);
+    op->_exception    = (overflow==1)?EXCEPTION_ALU_RANGE:EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_mulu"
+  void operation_l_mulu        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_mulu");
+
+    Tgeneral_data_t gpr1      = unsigned(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = unsigned(param->_size_data,op->_data_rb);
+    Tgeneral_data_t gpr3      ;
+    bool            overflow  ;
+    bool            carry_out ;
+
+    if (param->_size_data == 32)
+      {
+        uint64_t res = static_cast<uint64_t>(gpr1) * static_cast<uint64_t>(gpr2);
+
+        log_printf(TRACE,Functionnal_unit,FUNCTION,"  * res   : %llx",res);
+
+        gpr3      = param->_mask_data & static_cast<Tgeneral_data_t>(res);
+        carry_out = res != gpr3; 
+        overflow  = carry_out;
+      }
+    else
+      {
+        throw ERRORMORPHEO(FUNCTION,_("64 bits multiplcation : not yet implemented\n"));
+      }
+
+    // Result
+    op->_timing       = param->_timing[op->_type][op->_operation];
+    op->_data_rd      = gpr3;
+    op->_data_re      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_OV,overflow );
+    op->_data_re      = set_flag(op->_data_re,FLAG_CY,carry_out);
+    op->_exception    = (overflow==1)?EXCEPTION_ALU_RANGE:EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_div"
+  void operation_l_div         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_div");
+
+    Tgeneral_data_t gpr1      = signed(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = signed(param->_size_data,op->_data_rb);
+    Tgeneral_data_t gpr3      = (gpr2!=0)?(gpr1/gpr2):0;
+    bool            overflow  = ovf  (param->_size_data,gpr1,gpr2,gpr3);
+    bool            carry_out = (gpr2==0);
+
+    // Result
+    op->_timing       = param->_timing[op->_type][op->_operation];
+    op->_data_rd      = gpr3;
+    op->_data_re      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_OV,overflow );
+    op->_data_re      = set_flag(op->_data_re,FLAG_CY,carry_out);
+    op->_exception    = (overflow==1)?EXCEPTION_ALU_RANGE:EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_divu"
+  void operation_l_divu        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_divu");
+
+    Tgeneral_data_t gpr1      = unsigned(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = unsigned(param->_size_data,op->_data_rb);
+    Tgeneral_data_t gpr3      = (gpr2!=0)?(gpr1/gpr2):0;
+    bool            overflow  = ovf  (param->_size_data,gpr1,gpr2,gpr3);
+    bool            carry_out = (gpr2==0);
+
+    // Result
+    op->_timing       = param->_timing[op->_type][op->_operation];
+    op->_data_rd      = gpr3;
+    op->_data_re      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_OV,overflow );
+    op->_data_re      = set_flag(op->_data_re,FLAG_CY,carry_out);
+    op->_exception    = (overflow==1)?EXCEPTION_ALU_RANGE:EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
 #define FUNCTION "Functionnal_unit::operation_l_and"
   void operation_l_and         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
@@ -465,4 +589,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 >= gpr2);
 
@@ -485,4 +610,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 >  gpr2);
 
@@ -505,4 +631,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 <= gpr2);
 
@@ -525,4 +652,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 <  gpr2);
 
@@ -544,20 +672,18 @@
     Tgeneral_data_t gpr1       =   op->_data_ra;
     Tgeneral_data_t gpr2       =   (op->_has_immediat==1)?op->_immediat:op->_data_rb;
-    
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ra  : %.8x",unsigned(param->_size_data,op->_data_ra));
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ras : %.8x",  signed(param->_size_data,op->_data_ra));
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rb  : %.8x",unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb));
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rbs : %.8x",  signed(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb));
-    
+        
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 1                               ; break;
-      case 2 /*b10*/ : f_out = 0                               ; break;
-      default        : f_out = signed(param->_size_data,gpr1) >= signed(param->_size_data,gpr2); break;
-      }
-
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * f_out    : %.8x",f_out);
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) >= static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) >= static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 1                               ; break;
+//       case 2 /*b10*/ : f_out = 0                               ; break;
+//       default        : f_out = signed(param->_size_data,gpr1) >= signed(param->_size_data,gpr2); break;
+//       }
 
     // Result
@@ -581,10 +707,15 @@
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 1; break;
-      case 2 /*b10*/ : f_out = 0; break;
-      default        : f_out = signed(param->_size_data,gpr1) >  signed(param->_size_data,gpr2); break;
-      }
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) >  static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) >  static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 1; break;
+//       case 2 /*b10*/ : f_out = 0; break;
+//       default        : f_out = signed(param->_size_data,gpr1) >  signed(param->_size_data,gpr2); break;
+//       }
 
     // Result
@@ -608,10 +739,15 @@
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 0; break;
-      case 2 /*b10*/ : f_out = 1; break;
-      default        : f_out = signed(param->_size_data,gpr1) <= signed(param->_size_data,gpr2); break;
-      }
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) <= static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) <= static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 0; break;
+//       case 2 /*b10*/ : f_out = 1; break;
+//       default        : f_out = signed(param->_size_data,gpr1) <= signed(param->_size_data,gpr2); break;
+//       }
     
     // Result
@@ -635,10 +771,15 @@
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 0; break;
-      case 2 /*b10*/ : f_out = 1; break;
-      default        : f_out = signed(param->_size_data,gpr1) <  signed(param->_size_data,gpr2); break;
-      }
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) <  static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) <  static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 0; break;
+//       case 2 /*b10*/ : f_out = 1; break;
+//       default        : f_out = signed(param->_size_data,gpr1) <  signed(param->_size_data,gpr2); break;
+//       }
 
     // Result
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp	(revision 101)
@@ -18,5 +18,5 @@
 public : const Tcontext_t         _front_end_id ;
 public : const Tcontext_t         _ooo_engine_id;
-public : const Tpacket_t          _packet_id    ;
+public : const uint32_t           _packet_id    ;
 public : const Toperation_t       _operation    ;
 public : const Ttype_t            _type         ;
@@ -40,5 +40,5 @@
 			      Tcontext_t         front_end_id ,
 			      Tcontext_t         ooo_engine_id,
-			      Tpacket_t          packet_id    ,
+			      uint32_t           packet_id    ,
 			      Toperation_t       operation    ,
 			      Ttype_t            type         ,
@@ -356,11 +356,11 @@
   transaction_in.push_back(execute_transaction(_param,0,0,0, 99,OPERATION_FIND_L_FL1     ,TYPE_FIND,0,0         ,0x80000000,0x0       ,0              ,1,63,32         ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
 
-//   transaction_in.push_back(execute_transaction(_param,0,0,0,100,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12344321,0x1       ,0              ,1,63,0x12344320,1,15,0              ,EXCEPTION_NONE     ,0));
-//   transaction_in.push_back(execute_transaction(_param,0,0,0,101,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12345678,0xffffffff,0              ,1,56,0x12345679,1,3 ,0              ,EXCEPTION_NONE     ,0));
-//   transaction_in.push_back(execute_transaction(_param,0,0,0,102,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12345678,0x12345678,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
-//   transaction_in.push_back(execute_transaction(_param,0,0,0,103,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x0       ,0x0       ,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
-//   transaction_in.push_back(execute_transaction(_param,0,0,0,104,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x70000000,0x90000000,0              ,1,56,0x0       ,1,3 ,FLAG_CY        ,EXCEPTION_NONE     ,0));
-//   transaction_in.push_back(execute_transaction(_param,0,0,0,105,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x80001000,0x80000000,0              ,1,1 ,0x1000    ,1,0 ,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
-//   transaction_in.push_back(execute_transaction(_param,0,0,0,106,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x00000001,0x7fffffff,FLAG_CY|FLAG_OV,1,1 ,0x80000000,1,0 ,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,100,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12344321,0x1       ,0              ,1,63,0x12344320,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,101,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12345678,0xffffffff,0              ,1,56,0x12345679,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,102,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12345678,0x12345678,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,103,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x0       ,0x0       ,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,104,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x70000000,0x90000000,0              ,1,56,0xe0000000,1,3 ,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,105,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x80001000,0x80000000,0              ,1,1 ,0x1000    ,1,0 ,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,106,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x00000001,0x7fffffff,FLAG_CY|FLAG_OV,1,1 ,0x80000002,1,0 ,FLAG_CY        ,EXCEPTION_NONE     ,0));
 
   transaction_in.push_back(execute_transaction(_param,0,0,0,120,OPERATION_TEST_L_SFEQ    ,TYPE_TEST,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == +
@@ -440,5 +440,5 @@
   transaction_in.push_back(execute_transaction(_param,0,0,0,232,OPERATION_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  +
   transaction_in.push_back(execute_transaction(_param,0,0,0,233,OPERATION_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == -
-  transaction_in.push_back(execute_transaction(_param,0,0,0,234,OPERATION_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,234,OPERATION_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  -
   transaction_in.push_back(execute_transaction(_param,0,0,0,235,OPERATION_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  -
   transaction_in.push_back(execute_transaction(_param,0,0,0,236,OPERATION_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
@@ -569,4 +569,18 @@
   transaction_in.push_back(execute_transaction(_param,0,0,0,628,OPERATION_SPECIAL_L_MFSPR   ,TYPE_SPECIAL,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xa       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
 
+  transaction_in.push_back(execute_transaction(_param,0,0,0,700,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x00000001,0x00000001,0              ,1,63,0x00000001,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,701,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x00002107,0x00001981,0              ,1,63,0x034a5387,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x00048698,0x0000dead,0              ,1,63,0xefc6c4b8,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x40000000,0x00000002,0              ,1,63,0x80000000,1,15,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x40000000,0x00000004,0              ,1,63,0x00000000,1,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,700,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x00000001,0x00000001,0              ,1,63,0x00000001,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,701,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x00002107,0x00001981,0              ,1,63,0x034a5387,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x00048698,0x0000dead,0              ,1,63,0xefc6c4b8,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x40000000,0x00000002,0              ,1,63,0x80000000,1,15,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x40000000,0x00000004,0              ,1,63,0x00000000,1,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+
+
+
   LABEL("Reset");
   in_NRESET.write(0);
@@ -585,7 +599,7 @@
 
       LABEL("Iteration %d",iteration);
-
+      
       while (nb_transaction_out > 0)
-	{
+      {
 	  Tcontrol_t val = ((rand()%100) < percent_transaction_execute_in) and not transaction_in.empty();
 	  in_EXECUTE_IN_VAL .write(val);
@@ -601,5 +615,5 @@
 	      in_EXECUTE_IN_OOO_ENGINE_ID .write(transaction_in.front()._ooo_engine_id);
 	      if (_param->_have_port_rob_ptr)
-	      in_EXECUTE_IN_PACKET_ID     .write(transaction_in.front()._packet_id    );
+              in_EXECUTE_IN_PACKET_ID     .write(static_cast<Tpacket_t>(transaction_in.front()._packet_id));
 	      in_EXECUTE_IN_OPERATION     .write(transaction_in.front()._operation    );
 	      in_EXECUTE_IN_TYPE          .write(transaction_in.front()._type         );
@@ -624,5 +638,5 @@
 	      // TEST
 	      if (_param->_have_port_rob_ptr)
-	      TEST(Tpacket_t         , out_EXECUTE_OUT_PACKET_ID    .read(), transaction_out.front()._packet_id    );
+              TEST(Tpacket_t         , out_EXECUTE_OUT_PACKET_ID    .read(), static_cast<Tpacket_t>(transaction_out.front()._packet_id    ));
 	      if (_param->_have_port_context_id)
 	      TEST(Tcontext_t        , out_EXECUTE_OUT_CONTEXT_ID   .read(), transaction_out.front()._context_id   );
@@ -649,5 +663,4 @@
 		  TEST(Tgeneral_data_t   , out_EXECUTE_OUT_DATA_RD      .read(), transaction_out.front()._data_rd      );
 		  TEST(Tgeneral_data_t   , out_EXECUTE_OUT_ADDRESS      .read(), transaction_out.front()._address      );
-		  break;
 		}
 
@@ -659,5 +672,4 @@
 		  TEST(Tgeneral_data_t   , out_EXECUTE_OUT_DATA_RD      .read(), transaction_out.front()._data_rd      );
 		  TEST(Tgeneral_data_t   , out_EXECUTE_OUT_ADDRESS      .read(), transaction_out.front()._address      );
-		  break;
 		}
 	      
@@ -685,7 +697,8 @@
 
 	  SC_START(1);
-	}
+      }
 
     }
+
   /********************************************************
    * Simulation - End
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_allocation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_allocation.cpp	(revision 101)
@@ -174,6 +174,6 @@
      if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_ADDC        ]._latence > 0) 
        _function_execute[TYPE_ALU    ][OPERATION_ALU_L_ADDC        ] = &(operation_l_addc    );
-//   if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_SUB         ]._latence > 0) 
-//     _function_execute[TYPE_ALU    ][OPERATION_ALU_L_SUB         ] = &(operation_l_sub     );
+     if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_SUB         ]._latence > 0) 
+       _function_execute[TYPE_ALU    ][OPERATION_ALU_L_SUB         ] = &(operation_l_sub     );
      if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_AND         ]._latence > 0) 
        _function_execute[TYPE_ALU    ][OPERATION_ALU_L_AND         ] = &(operation_l_and     );
@@ -214,12 +214,12 @@
      if (_param->_timing[TYPE_TEST   ][OPERATION_TEST_L_SFNE       ]._latence > 0) 
        _function_execute[TYPE_TEST   ][OPERATION_TEST_L_SFNE       ] = &(operation_l_sfne    );
-//   if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MUL         ]._latence > 0) 
-//     _function_execute[TYPE_MUL    ][OPERATION_MUL_L_MUL         ] = &(operation_l_mul     );
-//   if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MULU        ]._latence > 0) 
-//     _function_execute[TYPE_DIV    ][OPERATION_MUL_L_MULU        ] = &(operation_l_mulu    );
-//   if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIV         ]._latence > 0) 
-//     _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIV         ] = &(operation_l_div     );
-//   if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ]._latence > 0) 
-//     _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ] = &(operation_l_divu    );
+     if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MUL         ]._latence > 0) 
+       _function_execute[TYPE_MUL    ][OPERATION_MUL_L_MUL         ] = &(operation_l_mul     );
+     if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MULU        ]._latence > 0) 
+       _function_execute[TYPE_MUL    ][OPERATION_MUL_L_MULU        ] = &(operation_l_mulu    );
+     if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIV         ]._latence > 0) 
+       _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIV         ] = &(operation_l_div     );
+     if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ]._latence > 0) 
+       _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ] = &(operation_l_divu    );
      if (_param->_timing[TYPE_EXTEND ][OPERATION_EXTEND_L_EXTEND_S ]._latence > 0) 
        _function_execute[TYPE_EXTEND ][OPERATION_EXTEND_L_EXTEND_S ] = &(operation_l_extend_s);
