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 + -
显示快捷键?