Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Instruction.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Instruction.h	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Instruction.h	(revision 86)
@@ -37,4 +37,9 @@
 
   void instruction_illegal             (decod_instruction_t * inst, decod_param_t * param);
+
+  void instruction_l_custom            (decod_instruction_t * inst, decod_param_t * param);
+  void instruction_lf_custom           (decod_instruction_t * inst, decod_param_t * param);
+  void instruction_lv_custom           (decod_instruction_t * inst, decod_param_t * param);
+  void instruction_custom              (decod_instruction_t * inst, decod_param_t * param);
   
   // ORBIS
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Types.h	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Types.h	(revision 86)
@@ -63,13 +63,16 @@
   public : Tgeneral_data_t    _mask_data ;
   public : Tgeneral_data_t    _mask_shift;
-  public : void (*** _function_decod) (decod_instruction_t *, decod_param_t *); // [type][opcod]
+  public : void (*** _function_decod ) (decod_instruction_t *, decod_param_t *); // [type][opcod]
+  public : void (*** _function_custom) (decod_instruction_t *, decod_param_t *); // [type][opcod]
   
   public : decod_param_t (uint32_t size_data,
-			  void (*** function_decod) (decod_instruction_t *, decod_param_t *))
+			  void (*** function_decod ) (decod_instruction_t *, decod_param_t *),
+			  void (*** function_custom) (decod_instruction_t *, decod_param_t *))
     {
-      _size_data      = size_data;
-      _mask_data      = gen_mask<Tgeneral_data_t> (size_data);
-      _mask_shift     = gen_mask<Tgeneral_data_t> (log2(size_data));
-      _function_decod = function_decod;
+      _size_data       = size_data;
+      _mask_data       = gen_mask<Tgeneral_data_t> (size_data);
+      _mask_shift      = gen_mask<Tgeneral_data_t> (log2(size_data));
+      _function_decod  = function_decod;
+      _function_custom = function_custom;
     };
   public : ~decod_param_t (void)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/src/Instruction.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/src/Instruction.cpp	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/src/Instruction.cpp	(revision 86)
@@ -13,4 +13,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Instruction.h"
+#include "Behavioural/include/Constants.h"
 
 namespace morpheo {
@@ -130,4 +131,119 @@
 
     inst->_event_type         = EVENT_TYPE_EXCEPTION;
+  }
+
+  void instruction_l_custom            (decod_instruction_t * inst, decod_param_t * param)
+  {
+    log_printf(TRACE,Decod,"instruction_l_custom","  * instruction   : custom");
+
+    uint32_t opcod = range<uint32_t>(inst->_instruction,31,26);
+
+    inst->_type = TYPE_CUSTOM;
+    switch (opcod)
+      {
+      case OPCOD_L_CUST1 : {inst->_operation = OPERATION_CUSTOM_L_1; break;}
+      case OPCOD_L_CUST2 : {inst->_operation = OPERATION_CUSTOM_L_2; break;}
+      case OPCOD_L_CUST3 : {inst->_operation = OPERATION_CUSTOM_L_3; break;}
+      case OPCOD_L_CUST4 : {inst->_operation = OPERATION_CUSTOM_L_4; break;}
+      case OPCOD_L_CUST5 : {inst->_operation = OPERATION_CUSTOM_L_5; break;}
+      case OPCOD_L_CUST6 : {inst->_operation = OPERATION_CUSTOM_L_6; break;}
+      case OPCOD_L_CUST7 : {inst->_operation = OPERATION_CUSTOM_L_7; break;}
+      case OPCOD_L_CUST8 : {inst->_operation = OPERATION_CUSTOM_L_8; break;}
+      default            : {throw ERRORMORPHEO("instruction_l_custom",_("Invalid Custom Opcod."));}
+      }
+    
+    (* param->_function_custom[ 0][opcod]) (inst,param);
+
+    instruction_custom(inst,param);
+  }
+
+  void instruction_lf_custom           (decod_instruction_t * inst, decod_param_t * param)
+  {
+    log_printf(TRACE,Decod,"instruction_lf_custom","  * instruction   : custom");
+
+    uint32_t opcod = range<uint32_t>(inst->_instruction, 7, 0);
+
+    inst->_type = TYPE_CUSTOM;
+    switch (opcod)
+      {
+//       case OPCOD_LF_CUST1_D : {inst->_operation = OPERATION_CUSTOM_LF_1_D; break;}
+//       case OPCOD_LF_CUST1_S : {inst->_operation = OPERATION_CUSTOM_LF_1_S; break;}
+      default               : {throw ERRORMORPHEO("instruction_lf_custom",_("Invalid Custom Opcod."));}
+      }
+    
+    (* param->_function_custom[ 1][opcod]) (inst,param);
+
+    instruction_custom(inst,param);
+  }
+
+  void instruction_lv_custom           (decod_instruction_t * inst, decod_param_t * param)
+  {
+    log_printf(TRACE,Decod,"instruction_lv_custom","  * instruction   : custom");
+
+    uint32_t opcod = range<uint32_t>(inst->_instruction, 7, 0);
+
+    inst->_type = TYPE_CUSTOM;
+    switch (opcod)
+      {
+//       case OPCOD_LV_CUST1 : {inst->_operation = OPERATION_CUSTOM_LV_1; break;}
+//       case OPCOD_LV_CUST2 : {inst->_operation = OPERATION_CUSTOM_LV_2; break;}
+//       case OPCOD_LV_CUST3 : {inst->_operation = OPERATION_CUSTOM_LV_3; break;}
+//       case OPCOD_LV_CUST4 : {inst->_operation = OPERATION_CUSTOM_LV_4; break;}
+      default             : {throw ERRORMORPHEO("instruction_lv_custom",_("Invalid Custom Opcod."));}
+      }
+    
+    (* param->_function_custom[ 2][opcod]) (inst,param);
+
+    instruction_custom(inst,param);
+  }
+
+  void instruction_custom              (decod_instruction_t * inst, decod_param_t * param)
+  {
+    // Test custom operation
+    
+    std::string msg = "";
+
+    if (inst->_exception_use !=  EXCEPTION_USE_ILLEGAL_INSTRUCTION)
+      {
+	if (inst->_type != TYPE_CUSTOM)
+	  msg += _("Invalid Type.\n");
+	
+	if ((inst->_operation != OPERATION_CUSTOM_L_1   ) and
+	    (inst->_operation != OPERATION_CUSTOM_L_2   ) and
+	    (inst->_operation != OPERATION_CUSTOM_L_3   ) and
+	    (inst->_operation != OPERATION_CUSTOM_L_4   ) and
+	    (inst->_operation != OPERATION_CUSTOM_L_5   ) and
+	    (inst->_operation != OPERATION_CUSTOM_L_6   ) and
+	    (inst->_operation != OPERATION_CUSTOM_L_7   ) and
+	    (inst->_operation != OPERATION_CUSTOM_L_8   ) and
+	    (inst->_operation != OPERATION_CUSTOM_LF_1_D) and
+	    (inst->_operation != OPERATION_CUSTOM_LF_1_S) and
+	    (inst->_operation != OPERATION_CUSTOM_LV_1  ) and
+	    (inst->_operation != OPERATION_CUSTOM_LV_2  ) and
+	    (inst->_operation != OPERATION_CUSTOM_LV_3  ) and
+	    (inst->_operation != OPERATION_CUSTOM_LV_4  ))
+	  msg += _("Invalid Operation.\n");
+	
+	if ((inst->_exception_use !=  EXCEPTION_USE_NONE               ) and 
+	    (inst->_exception_use !=  EXCEPTION_USE_RANGE              ) and
+	    (inst->_exception_use !=  EXCEPTION_USE_CUSTOM_0           ) and 
+	    (inst->_exception_use !=  EXCEPTION_USE_CUSTOM_1           ) and 
+	    (inst->_exception_use !=  EXCEPTION_USE_CUSTOM_2           ) and 
+	    (inst->_exception_use !=  EXCEPTION_USE_CUSTOM_3           ) and 
+	    (inst->_exception_use !=  EXCEPTION_USE_CUSTOM_4           ) and 
+	    (inst->_exception_use !=  EXCEPTION_USE_CUSTOM_5           ) and 
+	    (inst->_exception_use !=  EXCEPTION_USE_CUSTOM_6           ))
+	  msg += _("Invalid Exception.\n");
+
+	if ((inst->_event_type != EVENT_TYPE_NONE      ) and
+	    (inst->_event_type != EVENT_TYPE_SPR_ACCESS))
+	  msg += _("Invalid Event_type.\n");
+
+	if (inst->_address_next != (inst->_address+1))
+	  msg += _("Address must be in sequence.\n");
+
+	if (msg != "")
+	  throw ERRORMORPHEO("instruction_custom","Invalid decod : "+msg);
+      }
   }
   
@@ -706,5 +822,5 @@
     inst->_operation          = OPERATION_BRANCH_L_JALR;
     inst->_has_immediat       = 1;
-    inst->_immediat           = inst->_address_next+4;
+    inst->_immediat           = inst->_address_next+1;
     inst->_read_ra            = 0;
 //  inst->_num_reg_ra         = ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/main.cpp	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/main.cpp	(revision 86)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/include/test.h"
+#include "Behavioural/Custom/include/Custom_example.h"
 
 #define NB_PARAMS 8
@@ -79,5 +80,6 @@
 	 _load_balancing               ,
 	 _instruction_implemeted       ,
-	 NULL);
+	 &(morpheo::behavioural::custom::example_get_custom_information)
+);
       
       msg(_("%s"),param->print(1).c_str());
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/test.cpp	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/test.cpp	(revision 86)
@@ -17,7 +17,7 @@
   class entry_t
   {
-//   public : Tcontrol_t          _val                        ;
+//public : Tcontrol_t          _val                        ;
   public : Tinstruction_t      _instruction                ;
-//   public : Tcontext_t          _context_id                 ;
+//public : Tcontext_t          _context_id                 ;
   public : Tgeneral_address_t  _address_previous           ;
   public : Tgeneral_address_t  _address                    ;
@@ -26,5 +26,5 @@
   public : Tprediction_ptr_t   _branch_update_prediction_id;
   public : Tbranch_condition_t _branch_condition           ;
-//   public : Tcontrol_t          _branch_stack_write         ;
+//public : Tcontrol_t          _branch_stack_write         ;
   public : Tcontrol_t          _branch_direction           ;
   public : Tgeneral_address_t  _branch_address_dest        ;
@@ -299,7 +299,7 @@
 
       uint32_t w;
-      uint32_t x = 0xfc;
-      uint32_t y = 0x100;
-      uint32_t z = 0x104;
+      uint32_t x = (0x100>>2)-1;
+      uint32_t y = (0x100>>2);
+      uint32_t z = (0x100>>2)+1;
 
       uint32_t delay_slot_previous [_param->_nb_context];
@@ -307,6 +307,6 @@
       uint32_t delay_slot_next     [_param->_nb_context];
 
-#define SEQ    do {x=y; y=z; z+=4;} while(0);
-#define JMP(j) do {x=y; y=z; z =j;} while(0);
+#define SEQ    do {x=y; y=z; z+=1; LABEL("%.8x - previous : 0x%x (%d), current : 0x%x (%d), next : 0x%x (%d)",request [0].back()._instruction, x,x,y,y,z,z);} while(0);
+#define JMP(j) do {x=y; y=z; z =j; LABEL("%.8x - previous : 0x%x (%d), current : 0x%x (%d), next : 0x%x (%d)",request [0].back()._instruction, x,x,y,y,z,z);} while(0);
 
       // ===== l.add	r15, r4 , r8
@@ -615,5 +615,5 @@
       BRANCH_STATE_NONE,0,BRANCH_CONDITION_NONE_WITH_WRITE_STACK,1, w,
       0,TYPE_BRANCH,OPERATION_BRANCH_L_JALR,false,
-      1,z+4,0, 0,0,0 ,0,0                 ,1,9 ,0,0                 ,
+      1,z+1,0, 0,0,0 ,0,0                 ,1,9 ,0,0                 ,
       EXCEPTION_USE_NONE ,EVENT_TYPE_NONE));
       JMP(w);
@@ -643,5 +643,5 @@
       BRANCH_STATE_NONE,0,BRANCH_CONDITION_NONE_WITH_WRITE_STACK,1, w,
       0,TYPE_BRANCH,OPERATION_BRANCH_L_JALR,false,
-      1,z+4,0, 0,0,0 ,0,0                 ,1,9 ,0,0                 ,
+      1,z+1,0, 0,0,0 ,0,0                 ,1,9 ,0,0                 ,
       EXCEPTION_USE_NONE ,EVENT_TYPE_NONE));
       JMP(w);
@@ -1418,4 +1418,22 @@
       TYPE_TEST,OPERATION_TEST_L_SFLTU,false,
       1,0xfffffc06, 1,10, 0,0, 0,0, 0,0, 1,SPR_LOGIC_SR_F,
+      EXCEPTION_USE_NONE,EVENT_TYPE_NONE));
+      SEQ;
+
+      // ===== l.cust4 (encrypt)
+      request [0].push_back (entry_t(
+      0x7de80000,x,y,z,
+      0,0,0,0,0,0,
+      TYPE_CUSTOM,OPERATION_CUSTOM_L_4,false,
+      0,0x0, 1, 8, 0,0, 0,0, 1,15, 0,0,
+      EXCEPTION_USE_NONE,EVENT_TYPE_NONE));
+      SEQ;
+
+      // ===== l.cust8 (decrypt)
+      request [0].push_back (entry_t(
+      0xfde80000,x,y,z,
+      0,0,0,0,0,0,
+      TYPE_CUSTOM,OPERATION_CUSTOM_L_8,false,
+      0,0x0, 1, 8, 0,0, 0,0, 1,15, 0,0,
       EXCEPTION_USE_NONE,EVENT_TYPE_NONE));
       SEQ;
@@ -1451,7 +1469,7 @@
 		  if (it!=request [i].end())
 		    {
-		      uint32_t lsb = (it->_address>>2)%_param->_nb_inst_fetch[i];
+		      uint32_t lsb = it->_address%_param->_nb_inst_fetch[i];
 		      
-		      in_IFETCH_ADDRESS         [i]->write(it->_address-(lsb<<2));
+		      in_IFETCH_ADDRESS         [i]->write(it->_address-lsb);
 		      in_IFETCH_BRANCH_STATE    [i]->write(BRANCH_STATE_NONE);
 		      if (_param->_have_port_inst_ifetch_ptr)
@@ -1515,4 +1533,5 @@
 		LABEL("DECOD       [%d]    : transaction",i  );
 		LABEL(" * context         : %d",context);
+		LABEL(" * instruction     : 0x%x",request [context].front()._instruction);
 
 		if (_param->_have_port_depth)
@@ -1554,5 +1573,5 @@
 		    if (_param->_have_port_context_id)
 		    TEST(Tcontext_t         , out_PREDICT_CONTEXT_ID                  [i]->read(), context);
-		    TEST(Tcontrol_t         , out_PREDICT_MATCH_INST_IFETCH_PTR       [i]->read(),((request [context].front()._address>>2)%_param->_nb_inst_fetch[context]) == 0);
+		    TEST(Tcontrol_t         , out_PREDICT_MATCH_INST_IFETCH_PTR       [i]->read(),((request [context].front()._address)%_param->_nb_inst_fetch[context]) == 0);
 		    TEST(Tbranch_state_t    , out_PREDICT_BRANCH_STATE                [i]->read(), request [context].front()._branch_state               );
 		    if (_param->_have_port_branch_update_prediction_id)
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 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h	(revision 86)
@@ -140,4 +140,5 @@
   private   : decod_param_t                ** _decod_param      ; //[nb_context]
   private   : function_decod_t           **** _function_decod   ; //[nb_context][type][opcod]
+  private   : function_decod_t           **** _function_custom  ; //[nb_context][type][opcod]
   private   : std::list<select_t>             select;
 #endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Parameters.h	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Parameters.h	(revision 86)
@@ -40,4 +40,5 @@
   public : uint32_t            _max_nb_inst_fetch     ;
 
+  public : uint32_t            _size_address_inst     ;
   public : uint32_t            _size_context_id       ;
   public : uint32_t            _size_depth            ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_allocation.cpp	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_allocation.cpp	(revision 86)
@@ -69,6 +69,6 @@
       
       ALLOC1_SIGNAL_IN (in_IFETCH_CONTEXT_ID                 ,"context_id"                 ,Tcontext_t         ,_param->_size_context_id              );
-      ALLOC1_SIGNAL_IN (in_IFETCH_ADDRESS                    ,"address"                    ,Tgeneral_address_t ,_param->_size_general_data            );
-//    ALLOC1_SIGNAL_IN (in_IFETCH_ADDRESS_NEXT               ,"address_next"               ,Tgeneral_address_t ,_param->_size_general_data            );
+      ALLOC1_SIGNAL_IN (in_IFETCH_ADDRESS                    ,"address"                    ,Tgeneral_address_t ,_param->_size_address_inst            );
+//    ALLOC1_SIGNAL_IN (in_IFETCH_ADDRESS_NEXT               ,"address_next"               ,Tgeneral_address_t ,_param->_size_address_inst            );
       ALLOC1_SIGNAL_IN (in_IFETCH_INST_IFETCH_PTR            ,"inst_ifetch_ptr"            ,Tinst_ifetch_ptr_t ,_param->_size_inst_ifetch_ptr         );
       ALLOC1_SIGNAL_IN (in_IFETCH_BRANCH_STATE               ,"branch_state"               ,Tbranch_state_t    ,_param->_size_branch_state            );
@@ -87,5 +87,5 @@
       ALLOC1_SIGNAL_OUT(out_DECOD_OPERATION    ,"operation"    ,Toperation_t      ,_param->_size_operation             );
       ALLOC1_SIGNAL_OUT(out_DECOD_IS_DELAY_SLOT,"is_delay_slot",Tcontrol_t        ,1                                   );
-      ALLOC1_SIGNAL_OUT(out_DECOD_ADDRESS      ,"address"      ,Tgeneral_data_t   ,_param->_size_general_data          );
+      ALLOC1_SIGNAL_OUT(out_DECOD_ADDRESS      ,"address"      ,Tgeneral_data_t   ,_param->_size_address_inst          );
       ALLOC1_SIGNAL_OUT(out_DECOD_HAS_IMMEDIAT ,"has_immediat" ,Tcontrol_t        ,1                                   );
       ALLOC1_SIGNAL_OUT(out_DECOD_IMMEDIAT     ,"immediat"     ,Tgeneral_data_t   ,_param->_size_general_data          );
@@ -116,6 +116,6 @@
 //    ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_STACK_WRITE         ,"branch_stack_write"         ,Tcontrol_t         ,1                                     );
       ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_DIRECTION           ,"branch_direction"           ,Tcontrol_t         ,1                                     );
-      ALLOC1_SIGNAL_OUT(out_PREDICT_ADDRESS_SRC                ,"address_src"                ,Tgeneral_data_t    ,_param->_size_general_data            );
-      ALLOC1_SIGNAL_OUT(out_PREDICT_ADDRESS_DEST               ,"address_dest"               ,Tgeneral_data_t    ,_param->_size_general_data            );
+      ALLOC1_SIGNAL_OUT(out_PREDICT_ADDRESS_SRC                ,"address_src"                ,Tgeneral_data_t    ,_param->_size_address_inst            );
+      ALLOC1_SIGNAL_OUT(out_PREDICT_ADDRESS_DEST               ,"address_dest"               ,Tgeneral_data_t    ,_param->_size_address_inst            );
 //    ALLOC1_SIGNAL_IN ( in_PREDICT_CAN_CONTINUE               ,"can_continue"               ,Tcontrol_t         ,1                                     );
     }
@@ -138,6 +138,6 @@
       ALLOC_SIGNAL_OUT(out_CONTEXT_EVENT_TYPE         ,"type"         ,Tevent_type_t  ,_param->_size_event_type  );
       ALLOC_SIGNAL_OUT(out_CONTEXT_EVENT_IS_DELAY_SLOT,"is_delay_slot",Tcontrol_t     ,1                         );
-      ALLOC_SIGNAL_OUT(out_CONTEXT_EVENT_ADDRESS      ,"address"      ,Tgeneral_data_t,_param->_size_general_data);
-      ALLOC_SIGNAL_OUT(out_CONTEXT_EVENT_ADDRESS_EPCR ,"address_epcr" ,Tgeneral_data_t,_param->_size_general_data);
+      ALLOC_SIGNAL_OUT(out_CONTEXT_EVENT_ADDRESS      ,"address"      ,Tgeneral_data_t,_param->_size_address_inst);
+      ALLOC_SIGNAL_OUT(out_CONTEXT_EVENT_ADDRESS_EPCR ,"address_epcr" ,Tgeneral_data_t,_param->_size_address_inst);
     }
 
@@ -167,14 +167,18 @@
 					MAX_OPCOD_13};
     
-    _function_decod = new function_decod_t *** [_param->_nb_context];
+    _function_decod  = new function_decod_t *** [_param->_nb_context];
+    _function_custom = new function_decod_t *** [_param->_nb_context];
     for (uint32_t i=0; i<_param->_nb_context; i++)
       {
-	_function_decod [i] = new function_decod_t ** [nb_opcod_type];
+	_function_decod  [i] = new function_decod_t ** [nb_opcod_type];
+	_function_custom [i] = new function_decod_t ** [nb_opcod_type];
 	for (uint32_t j=0; j<nb_opcod_type; j++)
 	  {
-	    _function_decod [i][j] = new function_decod_t * [tab_opcod_type[j]];
+	    _function_decod  [i][j] = new function_decod_t * [tab_opcod_type[j]];
+	    _function_custom [i][j] = new function_decod_t * [tab_opcod_type[j]];
 	    for (uint32_t k=0; k<tab_opcod_type[j]; k++)
 	      {
-		_function_decod [i][j][k] = &(instruction_illegal);
+		_function_decod  [i][j][k] = &(instruction_illegal);
+		_function_custom [i][j][k] = &(instruction_illegal);
 	      }
 	  }
@@ -194,5 +198,4 @@
 	_function_decod[i][3][OPCOD_12] = &(instruction_decod_type_12); // Instructions extend			  
 	_function_decod[i][3][OPCOD_13] = &(instruction_decod_type_13); // Instructions extend (64b)		  
-
 
 	if (_param->_instruction_implemeted[i][INSTRUCTION_L_ADD      ]) _function_decod[i][ 3][OPCOD_L_ADD      ] = &(instruction_l_add       );
@@ -396,20 +399,34 @@
 //	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_XOR     ]) _function_decod[i][ 2][OPCOD_LV_XOR     ] = &(instruction_lv_xor      );
 
-	// Custom Instrucion
-
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST1    ]) _function_decod[i][ 0][OPCOD_L_CUST1    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_1   );
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST2    ]) _function_decod[i][ 0][OPCOD_L_CUST2    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_2   );
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST3    ]) _function_decod[i][ 0][OPCOD_L_CUST3    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_3   );
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST4    ]) _function_decod[i][ 0][OPCOD_L_CUST4    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_4   );
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST5    ]) _function_decod[i][ 0][OPCOD_L_CUST5    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_5   );
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST6    ]) _function_decod[i][ 0][OPCOD_L_CUST6    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_6   );
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST7    ]) _function_decod[i][ 0][OPCOD_L_CUST7    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_7   );
-	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST8    ]) _function_decod[i][ 0][OPCOD_L_CUST8    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_8   );
-// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LF_CUST1_D ]) _function_decod[i][ 1][OPCOD_LF_CUST1_D ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LF_1_D);
-// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LF_CUST1_S ]) _function_decod[i][ 1][OPCOD_LF_CUST1_S ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LF_1_S);
-// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST1   ]) _function_decod[i][ 2][OPCOD_LV_CUST1   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_1  );
-// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST2   ]) _function_decod[i][ 2][OPCOD_LV_CUST2   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_2  );
-// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST3   ]) _function_decod[i][ 2][OPCOD_LV_CUST3   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_3  );
-// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST4   ]) _function_decod[i][ 2][OPCOD_LV_CUST4   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_4  );
+	// Custom Instruction
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST1    ]) _function_decod [i][ 0][OPCOD_L_CUST1    ] = &(instruction_l_custom );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST2    ]) _function_decod [i][ 0][OPCOD_L_CUST2    ] = &(instruction_l_custom );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST3    ]) _function_decod [i][ 0][OPCOD_L_CUST3    ] = &(instruction_l_custom );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST4    ]) _function_decod [i][ 0][OPCOD_L_CUST4    ] = &(instruction_l_custom );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST5    ]) _function_decod [i][ 0][OPCOD_L_CUST5    ] = &(instruction_l_custom );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST6    ]) _function_decod [i][ 0][OPCOD_L_CUST6    ] = &(instruction_l_custom );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST7    ]) _function_decod [i][ 0][OPCOD_L_CUST7    ] = &(instruction_l_custom );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST8    ]) _function_decod [i][ 0][OPCOD_L_CUST8    ] = &(instruction_l_custom );
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LF_CUST1_D ]) _function_decod [i][ 1][OPCOD_LF_CUST1_D ] = &(instruction_lf_custom);
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LF_CUST1_S ]) _function_decod [i][ 1][OPCOD_LF_CUST1_S ] = &(instruction_lf_custom);
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST1   ]) _function_decod [i][ 2][OPCOD_LV_CUST1   ] = &(instruction_lv_custom);
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST2   ]) _function_decod [i][ 2][OPCOD_LV_CUST2   ] = &(instruction_lv_custom);
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST3   ]) _function_decod [i][ 2][OPCOD_LV_CUST3   ] = &(instruction_lv_custom);
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST4   ]) _function_decod [i][ 2][OPCOD_LV_CUST4   ] = &(instruction_lv_custom);
+
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST1    ]) _function_custom[i][ 0][OPCOD_L_CUST1    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_1   );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST2    ]) _function_custom[i][ 0][OPCOD_L_CUST2    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_2   );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST3    ]) _function_custom[i][ 0][OPCOD_L_CUST3    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_3   );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST4    ]) _function_custom[i][ 0][OPCOD_L_CUST4    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_4   );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST5    ]) _function_custom[i][ 0][OPCOD_L_CUST5    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_5   );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST6    ]) _function_custom[i][ 0][OPCOD_L_CUST6    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_6   );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST7    ]) _function_custom[i][ 0][OPCOD_L_CUST7    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_7   );
+	if (_param->_instruction_implemeted[i][INSTRUCTION_L_CUST8    ]) _function_custom[i][ 0][OPCOD_L_CUST8    ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_L_8   );
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LF_CUST1_D ]) _function_custom[i][ 1][OPCOD_LF_CUST1_D ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LF_1_D);
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LF_CUST1_S ]) _function_custom[i][ 1][OPCOD_LF_CUST1_S ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LF_1_S);
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST1   ]) _function_custom[i][ 2][OPCOD_LV_CUST1   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_1  );
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST2   ]) _function_custom[i][ 2][OPCOD_LV_CUST2   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_2  );
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST3   ]) _function_custom[i][ 2][OPCOD_LV_CUST3   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_3  );
+// 	if (_param->_instruction_implemeted[i][INSTRUCTION_LV_CUST4   ]) _function_custom[i][ 2][OPCOD_LV_CUST4   ] = _param->_get_custom_information(i)._get_custom_decod(OPERATION_CUSTOM_LV_4  );
       }
 
@@ -419,5 +436,6 @@
     for (uint32_t i=0; i<_param->_nb_context; i++)
       _decod_param [i] = new decod_param_t (_param->_size_general_data,
-					    _function_decod[i]);
+					    _function_decod [i],
+					    _function_custom[i]);
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_deallocation.cpp	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_deallocation.cpp	(revision 86)
@@ -102,5 +102,18 @@
     delete    internal_CONTEXT_IS_DELAY_SLOT    ;
 
-    delete [] _function_decod   ;
+    const uint32_t nb_opcod_type = 14;
+
+    for (uint32_t i=0; i<_param->_nb_context; i++)
+      {
+	for (uint32_t j=0; j<nb_opcod_type; j++)
+	  {
+	    delete [] _function_decod  [i][j];
+	    delete [] _function_custom [i][j];
+	  }
+	delete [] _function_decod  [i];
+	delete [] _function_custom [i];
+      }
+    delete [] _function_decod ;
+    delete [] _function_custom;
     delete    _decod_instruction;
     delete    _decod_param      ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp	(revision 86)
@@ -27,5 +27,5 @@
     // Initialization
     //-----------------------------------
-    Tcontrol_t context_event_val;
+    Tcontrol_t context_event_val = false;
     Tcontrol_t ifetch_ack [_param->_nb_context][_param->_max_nb_inst_fetch];
     for (uint32_t i=0; i<_param->_nb_context; i++)
@@ -79,5 +79,5 @@
 		ifetch_ack [x][y] = PORT_READ(in_DECOD_ACK [i]); // fetch_val and decod_enable and decod_ack
 
-		Tgeneral_data_t addr = PORT_READ(in_IFETCH_ADDRESS [x])+4*y;
+		Tgeneral_data_t addr = PORT_READ(in_IFETCH_ADDRESS [x])+y;
 
 		_decod_instruction->_instruction      = PORT_READ(in_IFETCH_INSTRUCTION [x][y]);
@@ -85,5 +85,5 @@
 		_decod_instruction->_address_previous = internal_CONTEXT_ADDRESS_PREVIOUS [x];
 		_decod_instruction->_address          = addr; //Compute the current address
-		_decod_instruction->_address_next     = addr+4;
+		_decod_instruction->_address_next     = addr+1;
 		_decod_instruction->_is_delay_slot    = internal_CONTEXT_IS_DELAY_SLOT [x];
 
@@ -94,4 +94,5 @@
 		log_printf(TRACE,Decod,FUNCTION,"  * address       : %.8x",addr);
 		log_printf(TRACE,Decod,FUNCTION,"  * is_delay_slot : %d",internal_CONTEXT_IS_DELAY_SLOT [x]);
+
 		instruction_decod (_decod_instruction, _decod_param[x]);
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Parameters.cpp	(revision 85)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Parameters.cpp	(revision 86)
@@ -53,4 +53,5 @@
     _max_nb_inst_fetch                     = max<uint32_t>(nb_inst_fetch,nb_context);
 
+    _size_address_inst                     = size_address-2;
     _size_context_id                       = log2(nb_context          );
     _size_depth                            = log2(nb_branch_speculated);
