fr30-ibld.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,541 行 · 第 1/3 页
C
1,541 行
break; case FR30_OPERAND_CRJ : value = fields->f_CRj; break; case FR30_OPERAND_R13 : value = 0; break; case FR30_OPERAND_R14 : value = 0; break; case FR30_OPERAND_R15 : value = 0; break; case FR30_OPERAND_RI : value = fields->f_Ri; break; case FR30_OPERAND_RIC : value = fields->f_Ric; break; case FR30_OPERAND_RJ : value = fields->f_Rj; break; case FR30_OPERAND_RJC : value = fields->f_Rjc; break; case FR30_OPERAND_RS1 : value = fields->f_Rs1; break; case FR30_OPERAND_RS2 : value = fields->f_Rs2; break; case FR30_OPERAND_CC : value = fields->f_cc; break; case FR30_OPERAND_CCC : value = fields->f_ccc; break; case FR30_OPERAND_DIR10 : value = fields->f_dir10; break; case FR30_OPERAND_DIR8 : value = fields->f_dir8; break; case FR30_OPERAND_DIR9 : value = fields->f_dir9; break; case FR30_OPERAND_DISP10 : value = fields->f_disp10; break; case FR30_OPERAND_DISP8 : value = fields->f_disp8; break; case FR30_OPERAND_DISP9 : value = fields->f_disp9; break; case FR30_OPERAND_I20 : value = fields->f_i20; break; case FR30_OPERAND_I32 : value = fields->f_i32; break; case FR30_OPERAND_I8 : value = fields->f_i8; break; case FR30_OPERAND_LABEL12 : value = fields->f_rel12; break; case FR30_OPERAND_LABEL9 : value = fields->f_rel9; break; case FR30_OPERAND_M4 : value = fields->f_m4; break; case FR30_OPERAND_PS : value = 0; break; case FR30_OPERAND_REGLIST_HI_LD : value = fields->f_reglist_hi_ld; break; case FR30_OPERAND_REGLIST_HI_ST : value = fields->f_reglist_hi_st; break; case FR30_OPERAND_REGLIST_LOW_LD : value = fields->f_reglist_low_ld; break; case FR30_OPERAND_REGLIST_LOW_ST : value = fields->f_reglist_low_st; break; case FR30_OPERAND_S10 : value = fields->f_s10; break; case FR30_OPERAND_U10 : value = fields->f_u10; break; case FR30_OPERAND_U4 : value = fields->f_u4; break; case FR30_OPERAND_U4C : value = fields->f_u4c; break; case FR30_OPERAND_U8 : value = fields->f_u8; break; case FR30_OPERAND_UDISP6 : value = fields->f_udisp6; break; default : /* xgettext:c-format */ fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"), opindex); abort (); } return value;}bfd_vmafr30_cgen_get_vma_operand (cd, opindex, fields) CGEN_CPU_DESC cd; int opindex; const CGEN_FIELDS * fields;{ bfd_vma value; switch (opindex) { case FR30_OPERAND_CRI : value = fields->f_CRi; break; case FR30_OPERAND_CRJ : value = fields->f_CRj; break; case FR30_OPERAND_R13 : value = 0; break; case FR30_OPERAND_R14 : value = 0; break; case FR30_OPERAND_R15 : value = 0; break; case FR30_OPERAND_RI : value = fields->f_Ri; break; case FR30_OPERAND_RIC : value = fields->f_Ric; break; case FR30_OPERAND_RJ : value = fields->f_Rj; break; case FR30_OPERAND_RJC : value = fields->f_Rjc; break; case FR30_OPERAND_RS1 : value = fields->f_Rs1; break; case FR30_OPERAND_RS2 : value = fields->f_Rs2; break; case FR30_OPERAND_CC : value = fields->f_cc; break; case FR30_OPERAND_CCC : value = fields->f_ccc; break; case FR30_OPERAND_DIR10 : value = fields->f_dir10; break; case FR30_OPERAND_DIR8 : value = fields->f_dir8; break; case FR30_OPERAND_DIR9 : value = fields->f_dir9; break; case FR30_OPERAND_DISP10 : value = fields->f_disp10; break; case FR30_OPERAND_DISP8 : value = fields->f_disp8; break; case FR30_OPERAND_DISP9 : value = fields->f_disp9; break; case FR30_OPERAND_I20 : value = fields->f_i20; break; case FR30_OPERAND_I32 : value = fields->f_i32; break; case FR30_OPERAND_I8 : value = fields->f_i8; break; case FR30_OPERAND_LABEL12 : value = fields->f_rel12; break; case FR30_OPERAND_LABEL9 : value = fields->f_rel9; break; case FR30_OPERAND_M4 : value = fields->f_m4; break; case FR30_OPERAND_PS : value = 0; break; case FR30_OPERAND_REGLIST_HI_LD : value = fields->f_reglist_hi_ld; break; case FR30_OPERAND_REGLIST_HI_ST : value = fields->f_reglist_hi_st; break; case FR30_OPERAND_REGLIST_LOW_LD : value = fields->f_reglist_low_ld; break; case FR30_OPERAND_REGLIST_LOW_ST : value = fields->f_reglist_low_st; break; case FR30_OPERAND_S10 : value = fields->f_s10; break; case FR30_OPERAND_U10 : value = fields->f_u10; break; case FR30_OPERAND_U4 : value = fields->f_u4; break; case FR30_OPERAND_U4C : value = fields->f_u4c; break; case FR30_OPERAND_U8 : value = fields->f_u8; break; case FR30_OPERAND_UDISP6 : value = fields->f_udisp6; 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. */voidfr30_cgen_set_int_operand (cd, opindex, fields, value) CGEN_CPU_DESC cd; int opindex; CGEN_FIELDS * fields; int value;{ switch (opindex) { case FR30_OPERAND_CRI : fields->f_CRi = value; break; case FR30_OPERAND_CRJ : fields->f_CRj = value; break; case FR30_OPERAND_R13 : break; case FR30_OPERAND_R14 : break; case FR30_OPERAND_R15 : break; case FR30_OPERAND_RI : fields->f_Ri = value; break; case FR30_OPERAND_RIC : fields->f_Ric = value; break; case FR30_OPERAND_RJ : fields->f_Rj = value; break; case FR30_OPERAND_RJC : fields->f_Rjc = value; break; case FR30_OPERAND_RS1 : fields->f_Rs1 = value; break; case FR30_OPERAND_RS2 : fields->f_Rs2 = value; break; case FR30_OPERAND_CC : fields->f_cc = value; break; case FR30_OPERAND_CCC : fields->f_ccc = value; break; case FR30_OPERAND_DIR10 : fields->f_dir10 = value; break; case FR30_OPERAND_DIR8 : fields->f_dir8 = value; break; case FR30_OPERAND_DIR9 : fields->f_dir9 = value; break; case FR30_OPERAND_DISP10 : fields->f_disp10 = value; break; case FR30_OPERAND_DISP8 : fields->f_disp8 = value; break; case FR30_OPERAND_DISP9 : fields->f_disp9 = value; break; case FR30_OPERAND_I20 : fields->f_i20 = value; break; case FR30_OPERAND_I32 : fields->f_i32 = value; break; case FR30_OPERAND_I8 : fields->f_i8 = value; break; case FR30_OPERAND_LABEL12 : fields->f_rel12 = value; break; case FR30_OPERAND_LABEL9 : fields->f_rel9 = value; break; case FR30_OPERAND_M4 : fields->f_m4 = value; break; case FR30_OPERAND_PS : break; case FR30_OPERAND_REGLIST_HI_LD : fields->f_reglist_hi_ld = value; break; case FR30_OPERAND_REGLIST_HI_ST : fields->f_reglist_hi_st = value; break; case FR30_OPERAND_REGLIST_LOW_LD : fields->f_reglist_low_ld = value; break; case FR30_OPERAND_REGLIST_LOW_ST : fields->f_reglist_low_st = value; break; case FR30_OPERAND_S10 : fields->f_s10 = value; break; case FR30_OPERAND_U10 : fields->f_u10 = value; break; case FR30_OPERAND_U4 : fields->f_u4 = value; break; case FR30_OPERAND_U4C : fields->f_u4c = value; break; case FR30_OPERAND_U8 : fields->f_u8 = value; break; case FR30_OPERAND_UDISP6 : fields->f_udisp6 = value; break; default : /* xgettext:c-format */ fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"), opindex); abort (); }}voidfr30_cgen_set_vma_operand (cd, opindex, fields, value) CGEN_CPU_DESC cd; int opindex; CGEN_FIELDS * fields; bfd_vma value;{ switch (opindex) { case FR30_OPERAND_CRI : fields->f_CRi = value; break; case FR30_OPERAND_CRJ : fields->f_CRj = value; break; case FR30_OPERAND_R13 : break; case FR30_OPERAND_R14 : break; case FR30_OPERAND_R15 : break; case FR30_OPERAND_RI : fields->f_Ri = value; break; case FR30_OPERAND_RIC : fields->f_Ric = value; break; case FR30_OPERAND_RJ : fields->f_Rj = value; break; case FR30_OPERAND_RJC : fields->f_Rjc = value; break; case FR30_OPERAND_RS1 : fields->f_Rs1 = value; break; case FR30_OPERAND_RS2 : fields->f_Rs2 = value; break; case FR30_OPERAND_CC : fields->f_cc = value; break; case FR30_OPERAND_CCC : fields->f_ccc = value; break; case FR30_OPERAND_DIR10 : fields->f_dir10 = value; break; case FR30_OPERAND_DIR8 : fields->f_dir8 = value; break; case FR30_OPERAND_DIR9 : fields->f_dir9 = value; break; case FR30_OPERAND_DISP10 : fields->f_disp10 = value; break; case FR30_OPERAND_DISP8 : fields->f_disp8 = value; break; case FR30_OPERAND_DISP9 : fields->f_disp9 = value; break; case FR30_OPERAND_I20 : fields->f_i20 = value; break; case FR30_OPERAND_I32 : fields->f_i32 = value; break; case FR30_OPERAND_I8 : fields->f_i8 = value; break; case FR30_OPERAND_LABEL12 : fields->f_rel12 = value; break; case FR30_OPERAND_LABEL9 : fields->f_rel9 = value; break; case FR30_OPERAND_M4 : fields->f_m4 = value; break; case FR30_OPERAND_PS : break; case FR30_OPERAND_REGLIST_HI_LD : fields->f_reglist_hi_ld = value; break; case FR30_OPERAND_REGLIST_HI_ST : fields->f_reglist_hi_st = value; break; case FR30_OPERAND_REGLIST_LOW_LD : fields->f_reglist_low_ld = value; break; case FR30_OPERAND_REGLIST_LOW_ST : fields->f_reglist_low_st = value; break; case FR30_OPERAND_S10 : fields->f_s10 = value; break; case FR30_OPERAND_U10 : fields->f_u10 = value; break; case FR30_OPERAND_U4 : fields->f_u4 = value; break; case FR30_OPERAND_U4C : fields->f_u4c = value; break; case FR30_OPERAND_U8 : fields->f_u8 = value; break; case FR30_OPERAND_UDISP6 : fields->f_udisp6 = 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. */voidfr30_cgen_init_ibld_table (cd) CGEN_CPU_DESC cd;{ cd->insert_handlers = & fr30_cgen_insert_handlers[0]; cd->extract_handlers = & fr30_cgen_extract_handlers[0]; cd->insert_operand = fr30_cgen_insert_operand; cd->extract_operand = fr30_cgen_extract_operand; cd->get_int_operand = fr30_cgen_get_int_operand; cd->set_int_operand = fr30_cgen_set_int_operand; cd->get_vma_operand = fr30_cgen_get_vma_operand; cd->set_vma_operand = fr30_cgen_set_vma_operand;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?