#ifndef morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_instruction_Instruction_h
#define morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_instruction_Instruction_h

/*
 * $Id$
 *
 * [ Description ]
 * 
 */

#include "Common/include/Debug.h"
#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/Instruction/include/Types.h"

namespace morpheo {
namespace behavioural {
namespace core {
namespace multi_front_end {
namespace front_end {
namespace decod_unit {
namespace decod {

  void instruction_decod               (decod_instruction_t * inst, decod_param_t * param);
//void instruction_decod_type_0        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_1        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_2        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_3        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_4        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_5        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_6        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_7        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_8        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_9        (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_10       (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_11       (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_12       (decod_instruction_t * inst, decod_param_t * param);
  void instruction_decod_type_13       (decod_instruction_t * inst, decod_param_t * param);

  void instruction_illegal             (decod_instruction_t * inst, decod_param_t * param);
  
  // ORBIS
  void instruction_l_add               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_addc              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_addi              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_addic             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_and               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_andi              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_bf	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_bnf               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_cmov              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_csync             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust1             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust2             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust3             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust4             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust5             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust6             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust7             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_l_cust8             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_div               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_divu              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_extbs             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_extbz             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_exths             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_exthz             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_extws             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_extwz             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_ff1               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_fl1               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_j	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_jal               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_jalr              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_jr	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_lbs               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_lbz               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_ld	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_lhs               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_lhz               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_lws               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_lwz               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_mac               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_maci              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_macrc             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_mfspr             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_movhi             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_msb               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_msync             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_mtspr             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_mul               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_muli              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_mulu              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_nop               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_or	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_ori               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_psync             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_rfe               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_ror               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_rori              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sb	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sd	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfeq              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfeqi             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfges             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfgesi            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfgeu             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfgeui            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfgts             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfgtsi            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfgtu             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfgtui            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfles             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sflesi            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfleu             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfleui            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sflts             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfltsi            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfltu             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfltui            (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfne              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sfnei             (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sh	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sll               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_slli              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sra               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_srai              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_srl               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_srli              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sub               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sw	               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_sys               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_trap              (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_xor               (decod_instruction_t * inst, decod_param_t * param);
  void instruction_l_xori              (decod_instruction_t * inst, decod_param_t * param);

  // ORFPX
//   void instruction_lf_add_d            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_add_s            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_cust1_d          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_cust1_s          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_div_d            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_div_s            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_ftoi_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_ftoi_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_itof_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_itof_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_madd_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_madd_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_mul_d            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_mul_s            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_rem_d            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_rem_s            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfeq_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfeq_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfge_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfge_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfgt_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfgt_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfle_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfle_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sflt_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sflt_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfne_d           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sfne_s           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sub_d            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lf_sub_s            (decod_instruction_t * inst, decod_param_t * param);

  // ORVDX
//   void instruction_lv_add_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_add_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_adds_b           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_adds_h           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_addu_b           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_addu_h           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_addus_b          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_addus_h          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_eq_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_eq_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_ge_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_ge_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_gt_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_gt_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_le_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_le_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_lt_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_lt_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_ne_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_all_ne_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_and              (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_eq_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_eq_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_ge_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_ge_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_gt_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_gt_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_le_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_le_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_lt_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_lt_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_ne_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_any_ne_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_avg_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_avg_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_eq_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_eq_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_ge_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_ge_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_gt_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_gt_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_le_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_le_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_lt_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_lt_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_ne_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cmp_ne_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cust1            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cust2            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cust3            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_cust4            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_madds_h          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_max_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_max_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_merge_b          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_merge_h          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_min_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_min_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_msubs_h          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_muls_h           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_nand             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_nor              (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_or               (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_pack_b           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_pack_h           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_packs_b          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_packs_h          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_packus_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_packus_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_perm_n           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_rl_b             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_rl_h             (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_sll              (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_sll_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_sll_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_sra_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_sra_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_srl              (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_srl_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_srl_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_sub_b            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_sub_h            (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_subs_b           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_subs_h           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_subu_b           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_subu_h           (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_subus_b          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_subus_h          (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_unpack_b         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_unpack_h         (decod_instruction_t * inst, decod_param_t * param);
//   void instruction_lv_xor              (decod_instruction_t * inst, decod_param_t * param);

}; // end namespace decod
}; // end namespace decod_unit
}; // end namespace front_end
}; // end namespace multi_front_end
}; // end namespace core
}; // end namespace behavioural
}; // end namespace morpheo              

#endif
