m32r-ibld.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,246 行 · 第 1/3 页

C
1,246
字号
      break;    case M32R_OPERAND_UIMM24 :      length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_ABS_ADDR), 0, 8, 24, 32, total_length, pc, & fields->f_uimm24);      break;    case M32R_OPERAND_UIMM4 :      length = extract_normal (cd, ex_info, insn_value, 0, 0, 12, 4, 32, total_length, pc, & fields->f_uimm4);      break;    case M32R_OPERAND_UIMM5 :      length = extract_normal (cd, ex_info, insn_value, 0, 0, 11, 5, 32, total_length, pc, & fields->f_uimm5);      break;    case M32R_OPERAND_ULO16 :      length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_uimm16);      break;    default :      /* xgettext:c-format */      fprintf (stderr, _("Unrecognized field %d while decoding insn.\n"),	       opindex);      abort ();    }  return length;}cgen_insert_fn * const m32r_cgen_insert_handlers[] = {  insert_insn_normal,};cgen_extract_fn * const m32r_cgen_extract_handlers[] = {  extract_insn_normal,};/* Getting values from cgen_fields is handled by a collection of functions.   They are distinguished by the type of the VALUE argument they return.   TODO: floating point, inlining support, remove cases where result type   not appropriate.  */intm32r_cgen_get_int_operand (cd, opindex, fields)     CGEN_CPU_DESC cd;     int opindex;     const CGEN_FIELDS * fields;{  int value;  switch (opindex)    {    case M32R_OPERAND_ACC :      value = fields->f_acc;      break;    case M32R_OPERAND_ACCD :      value = fields->f_accd;      break;    case M32R_OPERAND_ACCS :      value = fields->f_accs;      break;    case M32R_OPERAND_DCR :      value = fields->f_r1;      break;    case M32R_OPERAND_DISP16 :      value = fields->f_disp16;      break;    case M32R_OPERAND_DISP24 :      value = fields->f_disp24;      break;    case M32R_OPERAND_DISP8 :      value = fields->f_disp8;      break;    case M32R_OPERAND_DR :      value = fields->f_r1;      break;    case M32R_OPERAND_HASH :      value = 0;      break;    case M32R_OPERAND_HI16 :      value = fields->f_hi16;      break;    case M32R_OPERAND_IMM1 :      value = fields->f_imm1;      break;    case M32R_OPERAND_SCR :      value = fields->f_r2;      break;    case M32R_OPERAND_SIMM16 :      value = fields->f_simm16;      break;    case M32R_OPERAND_SIMM8 :      value = fields->f_simm8;      break;    case M32R_OPERAND_SLO16 :      value = fields->f_simm16;      break;    case M32R_OPERAND_SR :      value = fields->f_r2;      break;    case M32R_OPERAND_SRC1 :      value = fields->f_r1;      break;    case M32R_OPERAND_SRC2 :      value = fields->f_r2;      break;    case M32R_OPERAND_UIMM16 :      value = fields->f_uimm16;      break;    case M32R_OPERAND_UIMM24 :      value = fields->f_uimm24;      break;    case M32R_OPERAND_UIMM4 :      value = fields->f_uimm4;      break;    case M32R_OPERAND_UIMM5 :      value = fields->f_uimm5;      break;    case M32R_OPERAND_ULO16 :      value = fields->f_uimm16;      break;    default :      /* xgettext:c-format */      fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),		       opindex);      abort ();  }  return value;}bfd_vmam32r_cgen_get_vma_operand (cd, opindex, fields)     CGEN_CPU_DESC cd;     int opindex;     const CGEN_FIELDS * fields;{  bfd_vma value;  switch (opindex)    {    case M32R_OPERAND_ACC :      value = fields->f_acc;      break;    case M32R_OPERAND_ACCD :      value = fields->f_accd;      break;    case M32R_OPERAND_ACCS :      value = fields->f_accs;      break;    case M32R_OPERAND_DCR :      value = fields->f_r1;      break;    case M32R_OPERAND_DISP16 :      value = fields->f_disp16;      break;    case M32R_OPERAND_DISP24 :      value = fields->f_disp24;      break;    case M32R_OPERAND_DISP8 :      value = fields->f_disp8;      break;    case M32R_OPERAND_DR :      value = fields->f_r1;      break;    case M32R_OPERAND_HASH :      value = 0;      break;    case M32R_OPERAND_HI16 :      value = fields->f_hi16;      break;    case M32R_OPERAND_IMM1 :      value = fields->f_imm1;      break;    case M32R_OPERAND_SCR :      value = fields->f_r2;      break;    case M32R_OPERAND_SIMM16 :      value = fields->f_simm16;      break;    case M32R_OPERAND_SIMM8 :      value = fields->f_simm8;      break;    case M32R_OPERAND_SLO16 :      value = fields->f_simm16;      break;    case M32R_OPERAND_SR :      value = fields->f_r2;      break;    case M32R_OPERAND_SRC1 :      value = fields->f_r1;      break;    case M32R_OPERAND_SRC2 :      value = fields->f_r2;      break;    case M32R_OPERAND_UIMM16 :      value = fields->f_uimm16;      break;    case M32R_OPERAND_UIMM24 :      value = fields->f_uimm24;      break;    case M32R_OPERAND_UIMM4 :      value = fields->f_uimm4;      break;    case M32R_OPERAND_UIMM5 :      value = fields->f_uimm5;      break;    case M32R_OPERAND_ULO16 :      value = fields->f_uimm16;      break;    default :      /* xgettext:c-format */      fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),		       opindex);      abort ();  }  return value;}/* Stuffing values in cgen_fields is handled by a collection of functions.   They are distinguished by the type of the VALUE argument they accept.   TODO: floating point, inlining support, remove cases where argument type   not appropriate.  */voidm32r_cgen_set_int_operand (cd, opindex, fields, value)     CGEN_CPU_DESC cd;     int opindex;     CGEN_FIELDS * fields;     int value;{  switch (opindex)    {    case M32R_OPERAND_ACC :      fields->f_acc = value;      break;    case M32R_OPERAND_ACCD :      fields->f_accd = value;      break;    case M32R_OPERAND_ACCS :      fields->f_accs = value;      break;    case M32R_OPERAND_DCR :      fields->f_r1 = value;      break;    case M32R_OPERAND_DISP16 :      fields->f_disp16 = value;      break;    case M32R_OPERAND_DISP24 :      fields->f_disp24 = value;      break;    case M32R_OPERAND_DISP8 :      fields->f_disp8 = value;      break;    case M32R_OPERAND_DR :      fields->f_r1 = value;      break;    case M32R_OPERAND_HASH :      break;    case M32R_OPERAND_HI16 :      fields->f_hi16 = value;      break;    case M32R_OPERAND_IMM1 :      fields->f_imm1 = value;      break;    case M32R_OPERAND_SCR :      fields->f_r2 = value;      break;    case M32R_OPERAND_SIMM16 :      fields->f_simm16 = value;      break;    case M32R_OPERAND_SIMM8 :      fields->f_simm8 = value;      break;    case M32R_OPERAND_SLO16 :      fields->f_simm16 = value;      break;    case M32R_OPERAND_SR :      fields->f_r2 = value;      break;    case M32R_OPERAND_SRC1 :      fields->f_r1 = value;      break;    case M32R_OPERAND_SRC2 :      fields->f_r2 = value;      break;    case M32R_OPERAND_UIMM16 :      fields->f_uimm16 = value;      break;    case M32R_OPERAND_UIMM24 :      fields->f_uimm24 = value;      break;    case M32R_OPERAND_UIMM4 :      fields->f_uimm4 = value;      break;    case M32R_OPERAND_UIMM5 :      fields->f_uimm5 = value;      break;    case M32R_OPERAND_ULO16 :      fields->f_uimm16 = value;      break;    default :      /* xgettext:c-format */      fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),		       opindex);      abort ();  }}voidm32r_cgen_set_vma_operand (cd, opindex, fields, value)     CGEN_CPU_DESC cd;     int opindex;     CGEN_FIELDS * fields;     bfd_vma value;{  switch (opindex)    {    case M32R_OPERAND_ACC :      fields->f_acc = value;      break;    case M32R_OPERAND_ACCD :      fields->f_accd = value;      break;    case M32R_OPERAND_ACCS :      fields->f_accs = value;      break;    case M32R_OPERAND_DCR :      fields->f_r1 = value;      break;    case M32R_OPERAND_DISP16 :      fields->f_disp16 = value;      break;    case M32R_OPERAND_DISP24 :      fields->f_disp24 = value;      break;    case M32R_OPERAND_DISP8 :      fields->f_disp8 = value;      break;    case M32R_OPERAND_DR :      fields->f_r1 = value;      break;    case M32R_OPERAND_HASH :      break;    case M32R_OPERAND_HI16 :      fields->f_hi16 = value;      break;    case M32R_OPERAND_IMM1 :      fields->f_imm1 = value;      break;    case M32R_OPERAND_SCR :      fields->f_r2 = value;      break;    case M32R_OPERAND_SIMM16 :      fields->f_simm16 = value;      break;    case M32R_OPERAND_SIMM8 :      fields->f_simm8 = value;      break;    case M32R_OPERAND_SLO16 :      fields->f_simm16 = value;      break;    case M32R_OPERAND_SR :      fields->f_r2 = value;      break;    case M32R_OPERAND_SRC1 :      fields->f_r1 = value;      break;    case M32R_OPERAND_SRC2 :      fields->f_r2 = value;      break;    case M32R_OPERAND_UIMM16 :      fields->f_uimm16 = value;      break;    case M32R_OPERAND_UIMM24 :      fields->f_uimm24 = value;      break;    case M32R_OPERAND_UIMM4 :      fields->f_uimm4 = value;      break;    case M32R_OPERAND_UIMM5 :      fields->f_uimm5 = value;      break;    case M32R_OPERAND_ULO16 :      fields->f_uimm16 = value;      break;    default :      /* xgettext:c-format */      fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),		       opindex);      abort ();  }}/* Function to call before using the instruction builder tables.  */voidm32r_cgen_init_ibld_table (cd)     CGEN_CPU_DESC cd;{  cd->insert_handlers = & m32r_cgen_insert_handlers[0];  cd->extract_handlers = & m32r_cgen_extract_handlers[0];  cd->insert_operand = m32r_cgen_insert_operand;  cd->extract_operand = m32r_cgen_extract_operand;  cd->get_int_operand = m32r_cgen_get_int_operand;  cd->set_int_operand = m32r_cgen_set_int_operand;  cd->get_vma_operand = m32r_cgen_get_vma_operand;  cd->set_vma_operand = m32r_cgen_set_vma_operand;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?