X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=disas%2Fmips.c;h=97f661a37ee47c956dc45908dadf18e29a39d22f;hb=248987f92cfda8305d6d44ced23e173e62a8bc0e;hp=2614c52a4b6e94355dcc4c568e5bfb94dcb33a7f;hpb=1bc8dae31baa8b02a1b8e70c3244232e03bbb3b2;p=mirror_qemu.git diff --git a/disas/mips.c b/disas/mips.c index 2614c52a4b..97f661a37e 100644 --- a/disas/mips.c +++ b/disas/mips.c @@ -19,6 +19,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ +#include "qemu/osdep.h" #include "disas/bfd.h" /* mips.h. Mips opcode list for GDB, the GNU debugger. @@ -1296,12 +1297,12 @@ const struct mips_opcode mips_builtin_opcodes[] = {"dmod", "d,s,t", 0x000000de, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6}, {"ddivu", "d,s,t", 0x0000009f, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6}, {"dmodu", "d,s,t", 0x000000df, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6}, -{"ll", "t,o(b)", 0x7c000036, 0xfc00007f, LDD|RD_b|WR_t, 0, I32R6}, -{"sc", "t,o(b)", 0x7c000026, 0xfc00007f, LDD|RD_b|WR_t, 0, I32R6}, -{"lld", "t,o(b)", 0x7c000037, 0xfc00007f, LDD|RD_b|WR_t, 0, I64R6}, -{"scd", "t,o(b)", 0x7c000027, 0xfc00007f, LDD|RD_b|WR_t, 0, I64R6}, -{"pref", "h,o(b)", 0x7c000035, 0xfc00007f, RD_b, 0, I32R6}, -{"cache", "k,o(b)", 0x7c000025, 0xfc00007f, RD_b, 0, I32R6}, +{"ll", "t,+o(b)", 0x7c000036, 0xfc00007f, LDD|RD_b|WR_t, 0, I32R6}, +{"sc", "t,+o(b)", 0x7c000026, 0xfc00007f, LDD|RD_b|WR_t, 0, I32R6}, +{"lld", "t,+o(b)", 0x7c000037, 0xfc00007f, LDD|RD_b|WR_t, 0, I64R6}, +{"scd", "t,+o(b)", 0x7c000027, 0xfc00007f, LDD|RD_b|WR_t, 0, I64R6}, +{"pref", "h,+o(b)", 0x7c000035, 0xfc00007f, RD_b, 0, I32R6}, +{"cache", "k,+o(b)", 0x7c000025, 0xfc00007f, RD_b, 0, I32R6}, {"seleqz", "d,v,t", 0x00000035, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6}, {"selnez", "d,v,t", 0x00000037, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6}, {"maddf.s", "D,S,T", 0x46000018, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6}, @@ -1404,6 +1405,10 @@ const struct mips_opcode mips_builtin_opcodes[] = {"cmp.sor.d", "D,S,T", 0x46a00019, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6}, {"cmp.sune.d", "D,S,T", 0x46a0001a, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6}, {"cmp.sne.d", "D,S,T", 0x46a0001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6}, +{"dvp", "", 0x41600024, 0xffffffff, TRAP, 0, I32R6}, +{"dvp", "t", 0x41600024, 0xffe0ffff, TRAP|WR_t, 0, I32R6}, +{"evp", "", 0x41600004, 0xffffffff, TRAP, 0, I32R6}, +{"evp", "t", 0x41600004, 0xffe0ffff, TRAP|WR_t, 0, I32R6}, /* MSA */ {"sll.b", "+d,+e,+f", 0x7800000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA}, @@ -2238,6 +2243,8 @@ const struct mips_opcode mips_builtin_opcodes[] = {"ceil.l.s", "D,S", 0x4600000a, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 }, {"ceil.w.d", "D,S", 0x4620000e, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 }, {"ceil.w.s", "D,S", 0x4600000e, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 }, +{"mfhc0", "t,G,H", 0x40400000, 0xffe007f8, LCD|WR_t|RD_C0, 0, I33}, +{"mthc0", "t,G,H", 0x40c00000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, 0, I33}, {"cfc0", "t,G", 0x40400000, 0xffe007ff, LCD|WR_t|RD_C0, 0, I1 }, {"cfc1", "t,G", 0x44400000, 0xffe007ff, LCD|WR_t|RD_C1|FP_S, 0, I1 }, {"cfc1", "t,S", 0x44400000, 0xffe007ff, LCD|WR_t|RD_C1|FP_S, 0, I1 }, @@ -2407,6 +2414,7 @@ const struct mips_opcode mips_builtin_opcodes[] = {"emt", "", 0x41600be1, 0xffffffff, TRAP, 0, MT32 }, {"emt", "t", 0x41600be1, 0xffe0ffff, TRAP|WR_t, 0, MT32 }, {"eret", "", 0x42000018, 0xffffffff, 0, 0, I3|I32 }, +{"eretnc", "", 0x42000058, 0xffffffff, 0, 0, I33}, {"evpe", "", 0x41600021, 0xffffffff, TRAP, 0, MT32 }, {"evpe", "t", 0x41600021, 0xffe0ffff, TRAP|WR_t, 0, MT32 }, {"ext", "t,r,+A,+C", 0x7c000000, 0xfc00003f, WR_t|RD_s, 0, I33 }, @@ -2417,9 +2425,11 @@ const struct mips_opcode mips_builtin_opcodes[] = {"hibernate","", 0x42000023, 0xffffffff, 0, 0, V1 }, {"ins", "t,r,+A,+B", 0x7c000004, 0xfc00003f, WR_t|RD_s, 0, I33 }, {"jr", "s", 0x00000008, 0xfc1fffff, UBD|RD_s, 0, I1 }, +{"jr", "s", 0x00000009, 0xfc1fffff, UBD|RD_s, 0, I32R6 }, /* jalr */ /* jr.hb is officially MIPS{32,64}R2, but it works on R1 as jr with the same hazard barrier effect. */ {"jr.hb", "s", 0x00000408, 0xfc1fffff, UBD|RD_s, 0, I32 }, +{"jr.hb", "s", 0x00000409, 0xfc1fffff, UBD|RD_s, 0, I32R6 }, /* jalr.hb */ {"j", "s", 0x00000008, 0xfc1fffff, UBD|RD_s, 0, I1 }, /* jr */ /* SVR4 PIC code requires special handling for j, so it must be a macro. */ @@ -3511,6 +3521,7 @@ struct mips_cp0sel_name const char * const name; }; +#if 0 /* The mips16 registers. */ static const unsigned int mips16_to_32_reg_map[] = { @@ -3518,7 +3529,7 @@ static const unsigned int mips16_to_32_reg_map[] = }; #define mips16_reg_names(rn) mips_gpr_names[mips16_to_32_reg_map[rn]] - +#endif static const char * const mips_gpr_names_numeric[32] = { @@ -3801,13 +3812,6 @@ static const char * const mips_hwr_names_mips3264r2[32] = "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31" }; -static const char * const mips_msa_control_names_numeric[32] = { - "$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", - "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", - "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", - "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31" -}; - static const char * const mips_msa_control_names_mips3264r2[32] = { "MSAIR", "MSACSR", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", @@ -4253,7 +4257,7 @@ print_insn_args (const char *d, case '\0': /* xgettext:c-format */ (*info->fprintf_func) (info->stream, - _("# internal error, incomplete extension sequence (+)")); + "# internal error, incomplete extension sequence (+)"); return; case 'A': @@ -4511,7 +4515,7 @@ print_insn_args (const char *d, default: /* xgettext:c-format */ (*info->fprintf_func) (info->stream, - _("# internal error, undefined extension sequence (+%c)"), + "# internal error, undefined extension sequence (+%c)", *d); return; } @@ -4871,7 +4875,7 @@ print_insn_args (const char *d, default: /* xgettext:c-format */ (*info->fprintf_func) (info->stream, - _("# internal error, undefined modifier(%c)"), + "# internal error, undefined modifier(%c)", *d); return; } @@ -5735,7 +5739,7 @@ print_mips16_insn_arg (char type, /* xgettext:c-format */ (*info->fprintf_func) (info->stream, - _("# internal disassembler error, unrecognised modifier (%c)"), + "# internal disassembler error, unrecognised modifier (%c)", type); abort (); } @@ -5746,51 +5750,51 @@ print_mips_disassembler_options (FILE *stream) { unsigned int i; - fprintf (stream, _("\n\ + fprintf (stream, "\n\ The following MIPS specific disassembler options are supported for use\n\ -with the -M switch (multiple options should be separated by commas):\n")); +with the -M switch (multiple options should be separated by commas):\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ gpr-names=ABI Print GPR names according to specified ABI.\n\ - Default: based on binary being disassembled.\n")); + Default: based on binary being disassembled.\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ fpr-names=ABI Print FPR names according to specified ABI.\n\ - Default: numeric.\n")); + Default: numeric.\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ cp0-names=ARCH Print CP0 register names according to\n\ specified architecture.\n\ - Default: based on binary being disassembled.\n")); + Default: based on binary being disassembled.\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ hwr-names=ARCH Print HWR names according to specified\n\ architecture.\n\ - Default: based on binary being disassembled.\n")); + Default: based on binary being disassembled.\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ reg-names=ABI Print GPR and FPR names according to\n\ - specified ABI.\n")); + specified ABI.\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ reg-names=ARCH Print CP0 register and HWR names according to\n\ - specified architecture.\n")); + specified architecture.\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ For the options above, the following values are supported for \"ABI\":\n\ - ")); + "); for (i = 0; i < ARRAY_SIZE (mips_abi_choices); i++) fprintf (stream, " %s", mips_abi_choices[i].name); - fprintf (stream, _("\n")); + fprintf (stream, "\n"); - fprintf (stream, _("\n\ + fprintf (stream, "\n\ For the options above, The following values are supported for \"ARCH\":\n\ - ")); + "); for (i = 0; i < ARRAY_SIZE (mips_arch_choices); i++) if (*mips_arch_choices[i].name != '\0') fprintf (stream, " %s", mips_arch_choices[i].name); - fprintf (stream, _("\n")); + fprintf (stream, "\n"); - fprintf (stream, _("\n")); + fprintf (stream, "\n"); } #endif