X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Ffr30-opc.c;h=de1e8edc559ea63d4a807c985c29aafe400ee268;hb=06d7495078f00c42deef9d1a832fa0569a9b85ba;hp=38adc60af5c43bfc5eaece6e75a7f2ff04e2fbf3;hpb=ce04843a3e72a8be0e77b545803b8a41caebadd1;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/fr30-opc.c b/opcodes/fr30-opc.c index 38adc60af5..de1e8edc55 100644 --- a/opcodes/fr30-opc.c +++ b/opcodes/fr30-opc.c @@ -30,6 +30,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., #include "fr30-opc.h" #include "opintl.h" +/* Used by the ifield rtx function. */ +#define FLD(f) (fields->f) + /* The hash functions are recorded here to help keep assembler code out of the disassembler and vice versa. */ @@ -98,7 +101,8 @@ fr30_cgen_lookup_insn (od, insn, insn_value, length, fields, alias_p) /* Basic bit mask must be correct. */ /* ??? May wish to allow target to defer this check until the extract handler. */ - if ((base_insn & CGEN_INSN_MASK (insn)) == CGEN_INSN_VALUE (insn)) + if ((base_insn & CGEN_INSN_BASE_MASK (insn)) + == CGEN_INSN_BASE_VALUE (insn)) { /* ??? 0 is passed for `pc' */ int elength = (*CGEN_EXTRACT_FN (insn)) (od, insn, info, @@ -226,6 +230,7 @@ const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] = { "SIGN-OPT", NULL }, { "SIGNED", NULL }, { "UNSIGNED", NULL }, + { "VIRTUAL", NULL }, { 0, 0 } }; @@ -233,7 +238,9 @@ const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] = { { "ALIAS", NULL }, { "COND-CTI", NULL }, + { "DELAY-SLOT", NULL }, { "NO-DIS", NULL }, + { "NOT-IN-DELAY-SLOT", NULL }, { "RELAX", NULL }, { "RELAXABLE", NULL }, { "SKIP-CTI", NULL }, @@ -271,6 +278,32 @@ CGEN_KEYWORD fr30_cgen_opval_h_gr = 19 }; +CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_cr_entries[] = +{ + { "cr0", 0 }, + { "cr1", 1 }, + { "cr2", 2 }, + { "cr3", 3 }, + { "cr4", 4 }, + { "cr5", 5 }, + { "cr6", 6 }, + { "cr7", 7 }, + { "cr8", 8 }, + { "cr9", 9 }, + { "cr10", 10 }, + { "cr11", 11 }, + { "cr12", 12 }, + { "cr13", 13 }, + { "cr14", 14 }, + { "cr15", 15 } +}; + +CGEN_KEYWORD fr30_cgen_opval_h_cr = +{ + & fr30_cgen_opval_h_cr_entries[0], + 16 +}; + CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_dr_entries[] = { { "tbr", 0 }, @@ -344,7 +377,8 @@ static const CGEN_HW_ENTRY fr30_cgen_hw_entries[] = { HW_H_ADDR, & HW_ENT (HW_H_ADDR + 1), "h-addr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } }, { HW_H_IADDR, & HW_ENT (HW_H_IADDR + 1), "h-iaddr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } }, { HW_H_GR, & HW_ENT (HW_H_GR + 1), "h-gr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_gr, { 0, 0|(1<f_Rj; break; + case FR30_OPERAND_RIC : + value = fields->f_Ric; + break; + case FR30_OPERAND_RJC : + value = fields->f_Rjc; + break; + case FR30_OPERAND_CRI : + value = fields->f_CRi; + break; + case FR30_OPERAND_CRJ : + value = fields->f_CRj; + break; case FR30_OPERAND_RS1 : value = fields->f_Rs1; break; @@ -2256,8 +3674,8 @@ fr30_cgen_get_int_operand (opindex, fields) case FR30_OPERAND_U4 : value = fields->f_u4; break; - case FR30_OPERAND_M4 : - value = fields->f_m4; + case FR30_OPERAND_U4C : + value = fields->f_u4c; break; case FR30_OPERAND_U8 : value = fields->f_u8; @@ -2286,6 +3704,12 @@ fr30_cgen_get_int_operand (opindex, fields) case FR30_OPERAND_I32 : value = fields->f_i32; break; + case FR30_OPERAND_M4 : + value = fields->f_m4; + break; + case FR30_OPERAND_I20 : + value = fields->f_i20; + break; case FR30_OPERAND_DIR8 : value = fields->f_dir8; break; @@ -2301,9 +3725,24 @@ fr30_cgen_get_int_operand (opindex, fields) case FR30_OPERAND_LABEL12 : value = fields->f_rel12; break; + case FR30_OPERAND_REGLIST_LOW_LD : + value = fields->f_reglist_low_ld; + break; + case FR30_OPERAND_REGLIST_HI_LD : + value = fields->f_reglist_hi_ld; + break; + case FR30_OPERAND_REGLIST_LOW_ST : + value = fields->f_reglist_low_st; + break; + case FR30_OPERAND_REGLIST_HI_ST : + value = fields->f_reglist_hi_st; + break; case FR30_OPERAND_CC : value = fields->f_cc; break; + case FR30_OPERAND_CCC : + value = fields->f_ccc; + break; default : /* xgettext:c-format */ @@ -2330,6 +3769,18 @@ fr30_cgen_get_vma_operand (opindex, fields) case FR30_OPERAND_RJ : value = fields->f_Rj; break; + case FR30_OPERAND_RIC : + value = fields->f_Ric; + break; + case FR30_OPERAND_RJC : + value = fields->f_Rjc; + break; + case FR30_OPERAND_CRI : + value = fields->f_CRi; + break; + case FR30_OPERAND_CRJ : + value = fields->f_CRj; + break; case FR30_OPERAND_RS1 : value = fields->f_Rs1; break; @@ -2351,8 +3802,8 @@ fr30_cgen_get_vma_operand (opindex, fields) case FR30_OPERAND_U4 : value = fields->f_u4; break; - case FR30_OPERAND_M4 : - value = fields->f_m4; + case FR30_OPERAND_U4C : + value = fields->f_u4c; break; case FR30_OPERAND_U8 : value = fields->f_u8; @@ -2381,6 +3832,12 @@ fr30_cgen_get_vma_operand (opindex, fields) case FR30_OPERAND_I32 : value = fields->f_i32; break; + case FR30_OPERAND_M4 : + value = fields->f_m4; + break; + case FR30_OPERAND_I20 : + value = fields->f_i20; + break; case FR30_OPERAND_DIR8 : value = fields->f_dir8; break; @@ -2396,9 +3853,24 @@ fr30_cgen_get_vma_operand (opindex, fields) case FR30_OPERAND_LABEL12 : value = fields->f_rel12; break; + case FR30_OPERAND_REGLIST_LOW_LD : + value = fields->f_reglist_low_ld; + break; + case FR30_OPERAND_REGLIST_HI_LD : + value = fields->f_reglist_hi_ld; + break; + case FR30_OPERAND_REGLIST_LOW_ST : + value = fields->f_reglist_low_st; + break; + case FR30_OPERAND_REGLIST_HI_ST : + value = fields->f_reglist_hi_st; + break; case FR30_OPERAND_CC : value = fields->f_cc; break; + case FR30_OPERAND_CCC : + value = fields->f_ccc; + break; default : /* xgettext:c-format */ @@ -2429,6 +3901,18 @@ fr30_cgen_set_int_operand (opindex, fields, value) case FR30_OPERAND_RJ : fields->f_Rj = value; break; + case FR30_OPERAND_RIC : + fields->f_Ric = value; + break; + case FR30_OPERAND_RJC : + fields->f_Rjc = value; + break; + case FR30_OPERAND_CRI : + fields->f_CRi = value; + break; + case FR30_OPERAND_CRJ : + fields->f_CRj = value; + break; case FR30_OPERAND_RS1 : fields->f_Rs1 = value; break; @@ -2450,8 +3934,8 @@ fr30_cgen_set_int_operand (opindex, fields, value) case FR30_OPERAND_U4 : fields->f_u4 = value; break; - case FR30_OPERAND_M4 : - fields->f_m4 = value; + case FR30_OPERAND_U4C : + fields->f_u4c = value; break; case FR30_OPERAND_U8 : fields->f_u8 = value; @@ -2480,6 +3964,12 @@ fr30_cgen_set_int_operand (opindex, fields, value) case FR30_OPERAND_I32 : fields->f_i32 = value; break; + case FR30_OPERAND_M4 : + fields->f_m4 = value; + break; + case FR30_OPERAND_I20 : + fields->f_i20 = value; + break; case FR30_OPERAND_DIR8 : fields->f_dir8 = value; break; @@ -2495,9 +3985,24 @@ fr30_cgen_set_int_operand (opindex, fields, value) case FR30_OPERAND_LABEL12 : fields->f_rel12 = value; break; + case FR30_OPERAND_REGLIST_LOW_LD : + fields->f_reglist_low_ld = value; + break; + case FR30_OPERAND_REGLIST_HI_LD : + fields->f_reglist_hi_ld = value; + break; + case FR30_OPERAND_REGLIST_LOW_ST : + fields->f_reglist_low_st = value; + break; + case FR30_OPERAND_REGLIST_HI_ST : + fields->f_reglist_hi_st = value; + break; case FR30_OPERAND_CC : fields->f_cc = value; break; + case FR30_OPERAND_CCC : + fields->f_ccc = value; + break; default : /* xgettext:c-format */ @@ -2521,6 +4026,18 @@ fr30_cgen_set_vma_operand (opindex, fields, value) case FR30_OPERAND_RJ : fields->f_Rj = value; break; + case FR30_OPERAND_RIC : + fields->f_Ric = value; + break; + case FR30_OPERAND_RJC : + fields->f_Rjc = value; + break; + case FR30_OPERAND_CRI : + fields->f_CRi = value; + break; + case FR30_OPERAND_CRJ : + fields->f_CRj = value; + break; case FR30_OPERAND_RS1 : fields->f_Rs1 = value; break; @@ -2542,8 +4059,8 @@ fr30_cgen_set_vma_operand (opindex, fields, value) case FR30_OPERAND_U4 : fields->f_u4 = value; break; - case FR30_OPERAND_M4 : - fields->f_m4 = value; + case FR30_OPERAND_U4C : + fields->f_u4c = value; break; case FR30_OPERAND_U8 : fields->f_u8 = value; @@ -2572,6 +4089,12 @@ fr30_cgen_set_vma_operand (opindex, fields, value) case FR30_OPERAND_I32 : fields->f_i32 = value; break; + case FR30_OPERAND_M4 : + fields->f_m4 = value; + break; + case FR30_OPERAND_I20 : + fields->f_i20 = value; + break; case FR30_OPERAND_DIR8 : fields->f_dir8 = value; break; @@ -2587,9 +4110,24 @@ fr30_cgen_set_vma_operand (opindex, fields, value) case FR30_OPERAND_LABEL12 : fields->f_rel12 = value; break; + case FR30_OPERAND_REGLIST_LOW_LD : + fields->f_reglist_low_ld = value; + break; + case FR30_OPERAND_REGLIST_HI_LD : + fields->f_reglist_hi_ld = value; + break; + case FR30_OPERAND_REGLIST_LOW_ST : + fields->f_reglist_low_st = value; + break; + case FR30_OPERAND_REGLIST_HI_ST : + fields->f_reglist_hi_st = value; + break; case FR30_OPERAND_CC : fields->f_cc = value; break; + case FR30_OPERAND_CCC : + fields->f_ccc = value; + break; default : /* xgettext:c-format */