diff options
Diffstat (limited to 'devel/psptoolchain-binutils/files/patch-opcodes-mips-dis.c')
-rw-r--r-- | devel/psptoolchain-binutils/files/patch-opcodes-mips-dis.c | 702 |
1 files changed, 351 insertions, 351 deletions
diff --git a/devel/psptoolchain-binutils/files/patch-opcodes-mips-dis.c b/devel/psptoolchain-binutils/files/patch-opcodes-mips-dis.c index 3e9113d22460..51586c4cf0e8 100644 --- a/devel/psptoolchain-binutils/files/patch-opcodes-mips-dis.c +++ b/devel/psptoolchain-binutils/files/patch-opcodes-mips-dis.c @@ -1,6 +1,6 @@ ---- opcodes/mips-dis.c.orig 2005-03-03 11:49:50.000000000 +0000 -+++ opcodes/mips-dis.c 2006-05-09 02:55:36.000000000 +0100 -@@ -140,6 +140,139 @@ +--- ./opcodes/mips-dis.c.orig 2011-08-09 15:20:03.000000000 +0000 ++++ ./opcodes/mips-dis.c 2012-01-21 13:31:35.000000000 +0000 +@@ -245,6 +245,139 @@ "c0_taglo", "c0_taghi", "c0_errorepc", "c0_desave", }; @@ -137,10 +137,10 @@ + "", "", "", "", "", "", "", "" +}; + - static const struct mips_cp0sel_name mips_cp0sel_names_mips3264[] = { + static const struct mips_cp0sel_name mips_cp0sel_names_mips3264[] = + { { 16, 1, "c0_config1" }, - { 16, 2, "c0_config2" }, -@@ -288,6 +421,54 @@ +@@ -471,6 +604,54 @@ "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31" }; @@ -192,10 +192,10 @@ + "", "[0:1]", "", "[-1:1]" +}; + - struct mips_abi_choice { - const char *name; - const char * const *gpr_names; -@@ -359,6 +540,8 @@ + struct mips_abi_choice + { + const char * name; +@@ -550,6 +731,8 @@ mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric }, { "mips5", 1, bfd_mach_mips5, CPU_MIPS5, ISA_MIPS5, mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric }, @@ -204,352 +204,352 @@ /* For stock MIPS32, disassemble all applicable MIPS-specified ASEs. Note that MIPS-3D and MDMX are not applicable to MIPS32. (See -@@ -1031,6 +1214,349 @@ +@@ -1479,6 +1662,349 @@ (l >> OP_SH_FT) & OP_MASK_FT); break; -+ case '?': -+ /* VFPU extensions. */ -+ d++; -+ switch (*d) -+ { -+ case '\0': -+ /* xgettext:c-format */ -+ (*info->fprintf_func) (info->stream, -+ _("# internal error, incomplete VFPU extension sequence (?)")); -+ return; -+ -+ case 'o': -+ delta = (l >> OP_SH_VFPU_DELTA) & OP_MASK_VFPU_DELTA; -+ if (delta & 0x8000) -+ delta |= ~0xffff; -+ (*info->fprintf_func) (info->stream, "%d", -+ delta); -+ break; -+ -+ case '0': -+ case '1': -+ case '2': -+ case '3': -+ { -+ unsigned int pos = *d, base = '0'; -+ unsigned int negation = (l >> (pos - (base - VFPU_SH_PFX_NEG))) & VFPU_MASK_PFX_NEG; -+ unsigned int constant = (l >> (pos - (base - VFPU_SH_PFX_CST))) & VFPU_MASK_PFX_CST; -+ unsigned int abs_consthi = -+ (l >> (pos - (base - VFPU_SH_PFX_ABS_CSTHI))) & VFPU_MASK_PFX_ABS_CSTHI; -+ unsigned int swz_constlo = (l >> ((pos - base) * 2)) & VFPU_MASK_PFX_SWZ_CSTLO; -+ -+ if (negation) -+ (*info->fprintf_func) (info->stream, "-"); -+ if (constant) -+ { -+ (*info->fprintf_func) (info->stream, "%s", ++ case '?': ++ /* VFPU extensions. */ ++ d++; ++ switch (*d) ++ { ++ case '\0': ++ /* xgettext:c-format */ ++ (*info->fprintf_func) (info->stream, ++ _("# internal error, incomplete VFPU extension sequence (?)")); ++ return; ++ ++ case 'o': ++ delta = (l >> OP_SH_VFPU_DELTA) & OP_MASK_VFPU_DELTA; ++ if (delta & 0x8000) ++ delta |= ~0xffff; ++ (*info->fprintf_func) (info->stream, "%d", ++ delta); ++ break; ++ ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ { ++ unsigned int pos = *d, base = '0'; ++ unsigned int negation = (l >> (pos - (base - VFPU_SH_PFX_NEG))) & VFPU_MASK_PFX_NEG; ++ unsigned int constant = (l >> (pos - (base - VFPU_SH_PFX_CST))) & VFPU_MASK_PFX_CST; ++ unsigned int abs_consthi = ++ (l >> (pos - (base - VFPU_SH_PFX_ABS_CSTHI))) & VFPU_MASK_PFX_ABS_CSTHI; ++ unsigned int swz_constlo = (l >> ((pos - base) * 2)) & VFPU_MASK_PFX_SWZ_CSTLO; ++ ++ if (negation) ++ (*info->fprintf_func) (info->stream, "-"); ++ if (constant) ++ { ++ (*info->fprintf_func) (info->stream, "%s", + pfx_cst_names[(abs_consthi << 2) | swz_constlo]); -+ } -+ else -+ { -+ if (abs_consthi) -+ (*info->fprintf_func) (info->stream, "|%s|", -+ pfx_swz_names[swz_constlo]); -+ else -+ (*info->fprintf_func) (info->stream, "%s", -+ pfx_swz_names[swz_constlo]); -+ } -+ } -+ break; -+ -+ case '4': -+ case '5': -+ case '6': -+ case '7': -+ { -+ unsigned int pos = *d, base = '4'; -+ unsigned int mask = (l >> (pos - (base - VFPU_SH_PFX_MASK))) & VFPU_MASK_PFX_MASK; -+ unsigned int saturation = (l >> ((pos - base) * 2)) & VFPU_MASK_PFX_SAT; -+ -+ if (mask) -+ (*info->fprintf_func) (info->stream, "m"); -+ else -+ (*info->fprintf_func) (info->stream, "%s", ++ } ++ else ++ { ++ if (abs_consthi) ++ (*info->fprintf_func) (info->stream, "|%s|", ++ pfx_swz_names[swz_constlo]); ++ else ++ (*info->fprintf_func) (info->stream, "%s", ++ pfx_swz_names[swz_constlo]); ++ } ++ } ++ break; ++ ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ { ++ unsigned int pos = *d, base = '4'; ++ unsigned int mask = (l >> (pos - (base - VFPU_SH_PFX_MASK))) & VFPU_MASK_PFX_MASK; ++ unsigned int saturation = (l >> ((pos - base) * 2)) & VFPU_MASK_PFX_SAT; ++ ++ if (mask) ++ (*info->fprintf_func) (info->stream, "m"); ++ else ++ (*info->fprintf_func) (info->stream, "%s", + pfx_sat_names[saturation]); -+ } -+ break; -+ -+ case 'a': -+ { -+ unsigned int c = (l >> OP_SH_VFPU_CONST) & OP_MASK_VFPU_CONST; -+ if (c < vfpu_num_constants) -+ { -+ (*info->fprintf_func) (info->stream, "%s", -+ vfpu_const_names[c]); -+ } -+ break; -+ } -+ -+ case 'b': -+ /* 5-bit immediate value. */ -+ (*info->fprintf_func) (info->stream, "%d", -+ (l >> OP_SH_VFPU_IMM5) & OP_MASK_VFPU_IMM5); -+ break; -+ -+ case 'c': -+ /* VFPU condition code. */ -+ (*info->fprintf_func) (info->stream, "%d", -+ (l >> OP_SH_VFPU_CC) & OP_MASK_VFPU_CC); -+ break; -+ -+ case 'e': -+ /* 3-bit immediate value. */ -+ (*info->fprintf_func) (info->stream, "%d", -+ (l >> OP_SH_VFPU_IMM3) & OP_MASK_VFPU_IMM3); -+ break; -+ -+ case 'f': -+ /* Conditional compare. */ -+ (*info->fprintf_func) (info->stream, "%s", -+ vfpu_cond_names[(l >> OP_SH_VFPU_COND) & OP_MASK_VFPU_COND]); -+ /* Apparently this specifier is unused. */ -+ d++; -+ break; -+ -+ case 'i': -+ /* 8-bit immediate value. */ -+ (*info->fprintf_func) (info->stream, "0x%02x", -+ (l >> OP_SH_VFPU_IMM8) & OP_MASK_VFPU_IMM8); -+ break; -+ -+ case 'q': -+ /* VFPU control register (vmtvc). */ -+ (*info->fprintf_func) (info->stream, "$%d", -+ (l >> OP_SH_VFPU_VMTVC) & OP_MASK_VFPU_VMTVC); -+ break; -+ -+ case 'r': -+ /* VFPU control register (vmfvc). */ -+ (*info->fprintf_func) (info->stream, "$%d", -+ (l >> OP_SH_VFPU_VMFVC) & OP_MASK_VFPU_VMFVC); -+ break; -+ -+ case 'u': -+ /* Convert a VFPU 16-bit floating-point number to IEEE754. */ -+ { -+ union float2int { -+ unsigned int i; -+ float f; -+ } float2int; -+ unsigned short float16 = (l >> OP_SH_VFPU_FLOAT16) & OP_MASK_VFPU_FLOAT16; -+ unsigned int sign = (float16 >> VFPU_SH_FLOAT16_SIGN) & VFPU_MASK_FLOAT16_SIGN; -+ int exponent = (float16 >> VFPU_SH_FLOAT16_EXP) & VFPU_MASK_FLOAT16_EXP; -+ unsigned int fraction = float16 & VFPU_MASK_FLOAT16_FRAC; -+ char signchar = '+' + ((sign == 1) * 2); -+ -+ if (exponent == VFPU_FLOAT16_EXP_MAX) -+ { -+ if (fraction == 0) -+ (*info->fprintf_func) (info->stream, "%cInf", signchar); -+ else -+ (*info->fprintf_func) (info->stream, "%cNaN", signchar); -+ } -+ else if (exponent == 0 && fraction == 0) -+ { -+ (*info->fprintf_func) (info->stream, "%c0", signchar); -+ } -+ else -+ { -+ if (exponent == 0) -+ { -+ do -+ { -+ fraction <<= 1; -+ exponent--; -+ } -+ while (!(fraction & (VFPU_MASK_FLOAT16_FRAC + 1))); -+ -+ fraction &= VFPU_MASK_FLOAT16_FRAC; -+ } -+ -+ /* Convert to 32-bit single-precision IEEE754. */ -+ float2int.i = sign << 31; -+ float2int.i |= (exponent + 112) << 23; -+ float2int.i |= fraction << 13; -+ (*info->fprintf_func) (info->stream, "%g", float2int.f); -+ } -+ } -+ break; -+ -+ case 'w': -+ { -+ const char *elements[4]; -+ unsigned int opcode = l & VFPU_MASK_OP_SIZE; -+ unsigned int rotators = (l >> OP_SH_VFPU_ROT) & OP_MASK_VFPU_ROT; -+ unsigned int opsize, rothi, rotlo, negation, i; -+ -+ /* Determine the operand size so we'll know how many elements to output. */ -+ if (opcode == VFPU_OP_SIZE_PAIR) -+ opsize = 2; -+ else if (opcode == VFPU_OP_SIZE_TRIPLE) -+ opsize = 3; -+ else -+ opsize = (opcode == VFPU_OP_SIZE_QUAD) * 4; /* Sanity check. */ -+ -+ rothi = (rotators >> VFPU_SH_ROT_HI) & VFPU_MASK_ROT_HI; -+ rotlo = (rotators >> VFPU_SH_ROT_LO) & VFPU_MASK_ROT_LO; -+ negation = (rotators >> VFPU_SH_ROT_NEG) & VFPU_MASK_ROT_NEG; -+ -+ if (rothi == rotlo) -+ { -+ if (negation) -+ { -+ elements[0] = "-s"; -+ elements[1] = "-s"; -+ elements[2] = "-s"; -+ elements[3] = "-s"; -+ } -+ else -+ { -+ elements[0] = "s"; -+ elements[1] = "s"; -+ elements[2] = "s"; -+ elements[3] = "s"; -+ } -+ } -+ else -+ { -+ elements[0] = "0"; -+ elements[1] = "0"; -+ elements[2] = "0"; -+ elements[3] = "0"; -+ } -+ if (negation) -+ elements[rothi] = "-s"; -+ else -+ elements[rothi] = "s"; -+ elements[rotlo] = "c"; -+ -+ (*info->fprintf_func) (info->stream, "["); -+ i = 0; -+ for (;;) -+ { -+ (*info->fprintf_func) (info->stream, "%s", -+ elements[i++]); -+ if (i >= opsize) -+ break; -+ (*info->fprintf_func) (info->stream, ","); -+ } -+ (*info->fprintf_func) (info->stream, "]"); -+ } -+ break; -+ -+ case 'd': -+ case 'm': -+ case 'n': -+ case 's': -+ case 't': -+ case 'v': -+ case 'x': -+ { -+ unsigned int vreg = 0; -+ -+ /* The first char specifies the bitfield that contains the register number. */ -+ switch (*d) -+ { -+ case 'd': -+ case 'v': -+ case 'x': -+ vreg = (l >> OP_SH_VFPU_VD) & OP_MASK_VFPU_VD; -+ break; -+ -+ case 'm': -+ /* Combine bits 0-4 of vt with bits 5-6 of vt. */ -+ vreg = ((l >> OP_SH_VFPU_VT_LO) & OP_MASK_VFPU_VT_LO) -+ | ((l & OP_MASK_VFPU_VT_HI2) << OP_SH_VFPU_VT_HI); -+ break; -+ -+ case 'n': -+ /* Combine bits 0-4 of vt with bit 5 of vt. */ -+ vreg = ((l >> OP_SH_VFPU_VT_LO) & OP_MASK_VFPU_VT_LO) -+ | ((l & OP_MASK_VFPU_VT_HI1) << OP_SH_VFPU_VT_HI); -+ break; -+ -+ case 's': -+ { -+ unsigned int temp_vreg = l >> OP_SH_VFPU_VS; -+ -+ vreg = temp_vreg & OP_MASK_VFPU_VS; -+ if ((l & VFPU_OP_VT_VS_VD) == VFPU_OPCODE_VMMUL) -+ { -+ /* vmmul instructions have the RXC bit (bit 13) inverted. */ -+ if (temp_vreg & 0x20) -+ vreg = temp_vreg & 0x5f; -+ else -+ vreg |= 0x20; -+ } -+ } -+ break; -+ -+ case 't': -+ vreg = (l >> OP_SH_VFPU_VT) & OP_MASK_VFPU_VT; -+ break; -+ } -+ -+ /* The next char is the register set vreg comes from. */ -+ d++; -+ switch (*d) -+ { -+ case '0': -+ (*info->fprintf_func) (info->stream, "%s.s", -+ vfpu_sreg_names[vreg]); -+ break; -+ -+ case '1': -+ (*info->fprintf_func) (info->stream, "%s.p", -+ vfpu_vpreg_names[vreg]); -+ break; -+ -+ case '2': -+ (*info->fprintf_func) (info->stream, "%s.t", -+ vfpu_vtreg_names[vreg]); -+ break; -+ -+ case '3': -+ (*info->fprintf_func) (info->stream, "%s.q", -+ vfpu_vqreg_names[vreg]); -+ break; -+ -+ case '5': -+ (*info->fprintf_func) (info->stream, "%s.p", -+ vfpu_mpreg_names[vreg]); -+ break; -+ -+ case '6': -+ (*info->fprintf_func) (info->stream, "%s.t", -+ vfpu_mtreg_names[vreg]); -+ break; -+ -+ case '7': -+ (*info->fprintf_func) (info->stream, "%s.q", -+ vfpu_mqreg_names[vreg]); -+ break; -+ -+ default: -+ /* xgettext:c-format */ -+ (*info->fprintf_func) (info->stream, -+ _("# internal error, undefined vreg modifier(%c)"), -+ *d); -+ break; -+ } -+ -+ /* The last char is unused for disassembly. */ -+ d++; -+ } -+ break; -+ -+ case 'z': -+ (*info->fprintf_func) (info->stream, "%s", -+ vfpu_rwb_names[(l >> OP_SH_VFPU_RWB) & OP_MASK_VFPU_RWB]); -+ break; -+ } -+ break; ++ } ++ break; ++ ++ case 'a': ++ { ++ unsigned int c = (l >> OP_SH_VFPU_CONST) & OP_MASK_VFPU_CONST; ++ if (c < vfpu_num_constants) ++ { ++ (*info->fprintf_func) (info->stream, "%s", ++ vfpu_const_names[c]); ++ } ++ break; ++ } ++ ++ case 'b': ++ /* 5-bit immediate value. */ ++ (*info->fprintf_func) (info->stream, "%d", ++ (l >> OP_SH_VFPU_IMM5) & OP_MASK_VFPU_IMM5); ++ break; ++ ++ case 'c': ++ /* VFPU condition code. */ ++ (*info->fprintf_func) (info->stream, "%d", ++ (l >> OP_SH_VFPU_CC) & OP_MASK_VFPU_CC); ++ break; ++ ++ case 'e': ++ /* 3-bit immediate value. */ ++ (*info->fprintf_func) (info->stream, "%d", ++ (l >> OP_SH_VFPU_IMM3) & OP_MASK_VFPU_IMM3); ++ break; ++ ++ case 'f': ++ /* Conditional compare. */ ++ (*info->fprintf_func) (info->stream, "%s", ++ vfpu_cond_names[(l >> OP_SH_VFPU_COND) & OP_MASK_VFPU_COND]); ++ /* Apparently this specifier is unused. */ ++ d++; ++ break; ++ ++ case 'i': ++ /* 8-bit immediate value. */ ++ (*info->fprintf_func) (info->stream, "0x%02x", ++ (l >> OP_SH_VFPU_IMM8) & OP_MASK_VFPU_IMM8); ++ break; ++ ++ case 'q': ++ /* VFPU control register (vmtvc). */ ++ (*info->fprintf_func) (info->stream, "$%d", ++ (l >> OP_SH_VFPU_VMTVC) & OP_MASK_VFPU_VMTVC); ++ break; ++ ++ case 'r': ++ /* VFPU control register (vmfvc). */ ++ (*info->fprintf_func) (info->stream, "$%d", ++ (l >> OP_SH_VFPU_VMFVC) & OP_MASK_VFPU_VMFVC); ++ break; ++ ++ case 'u': ++ /* Convert a VFPU 16-bit floating-point number to IEEE754. */ ++ { ++ union float2int { ++ unsigned int i; ++ float f; ++ } float2int; ++ unsigned short float16 = (l >> OP_SH_VFPU_FLOAT16) & OP_MASK_VFPU_FLOAT16; ++ unsigned int sign = (float16 >> VFPU_SH_FLOAT16_SIGN) & VFPU_MASK_FLOAT16_SIGN; ++ int exponent = (float16 >> VFPU_SH_FLOAT16_EXP) & VFPU_MASK_FLOAT16_EXP; ++ unsigned int fraction = float16 & VFPU_MASK_FLOAT16_FRAC; ++ char signchar = '+' + ((sign == 1) * 2); ++ ++ if (exponent == VFPU_FLOAT16_EXP_MAX) ++ { ++ if (fraction == 0) ++ (*info->fprintf_func) (info->stream, "%cInf", signchar); ++ else ++ (*info->fprintf_func) (info->stream, "%cNaN", signchar); ++ } ++ else if (exponent == 0 && fraction == 0) ++ { ++ (*info->fprintf_func) (info->stream, "%c0", signchar); ++ } ++ else ++ { ++ if (exponent == 0) ++ { ++ do ++ { ++ fraction <<= 1; ++ exponent--; ++ } ++ while (!(fraction & (VFPU_MASK_FLOAT16_FRAC + 1))); ++ ++ fraction &= VFPU_MASK_FLOAT16_FRAC; ++ } ++ ++ /* Convert to 32-bit single-precision IEEE754. */ ++ float2int.i = sign << 31; ++ float2int.i |= (exponent + 112) << 23; ++ float2int.i |= fraction << 13; ++ (*info->fprintf_func) (info->stream, "%g", float2int.f); ++ } ++ } ++ break; ++ ++ case 'w': ++ { ++ const char *elements[4]; ++ unsigned int opcode = l & VFPU_MASK_OP_SIZE; ++ unsigned int rotators = (l >> OP_SH_VFPU_ROT) & OP_MASK_VFPU_ROT; ++ unsigned int opsize, rothi, rotlo, negation, i; ++ ++ /* Determine the operand size so we'll know how many elements to output. */ ++ if (opcode == VFPU_OP_SIZE_PAIR) ++ opsize = 2; ++ else if (opcode == VFPU_OP_SIZE_TRIPLE) ++ opsize = 3; ++ else ++ opsize = (opcode == VFPU_OP_SIZE_QUAD) * 4; /* Sanity check. */ ++ ++ rothi = (rotators >> VFPU_SH_ROT_HI) & VFPU_MASK_ROT_HI; ++ rotlo = (rotators >> VFPU_SH_ROT_LO) & VFPU_MASK_ROT_LO; ++ negation = (rotators >> VFPU_SH_ROT_NEG) & VFPU_MASK_ROT_NEG; ++ ++ if (rothi == rotlo) ++ { ++ if (negation) ++ { ++ elements[0] = "-s"; ++ elements[1] = "-s"; ++ elements[2] = "-s"; ++ elements[3] = "-s"; ++ } ++ else ++ { ++ elements[0] = "s"; ++ elements[1] = "s"; ++ elements[2] = "s"; ++ elements[3] = "s"; ++ } ++ } ++ else ++ { ++ elements[0] = "0"; ++ elements[1] = "0"; ++ elements[2] = "0"; ++ elements[3] = "0"; ++ } ++ if (negation) ++ elements[rothi] = "-s"; ++ else ++ elements[rothi] = "s"; ++ elements[rotlo] = "c"; ++ ++ (*info->fprintf_func) (info->stream, "["); ++ i = 0; ++ for (;;) ++ { ++ (*info->fprintf_func) (info->stream, "%s", ++ elements[i++]); ++ if (i >= opsize) ++ break; ++ (*info->fprintf_func) (info->stream, ","); ++ } ++ (*info->fprintf_func) (info->stream, "]"); ++ } ++ break; ++ ++ case 'd': ++ case 'm': ++ case 'n': ++ case 's': ++ case 't': ++ case 'v': ++ case 'x': ++ { ++ unsigned int vreg = 0; ++ ++ /* The first char specifies the bitfield that contains the register number. */ ++ switch (*d) ++ { ++ case 'd': ++ case 'v': ++ case 'x': ++ vreg = (l >> OP_SH_VFPU_VD) & OP_MASK_VFPU_VD; ++ break; ++ ++ case 'm': ++ /* Combine bits 0-4 of vt with bits 5-6 of vt. */ ++ vreg = ((l >> OP_SH_VFPU_VT_LO) & OP_MASK_VFPU_VT_LO) ++ | ((l & OP_MASK_VFPU_VT_HI2) << OP_SH_VFPU_VT_HI); ++ break; ++ ++ case 'n': ++ /* Combine bits 0-4 of vt with bit 5 of vt. */ ++ vreg = ((l >> OP_SH_VFPU_VT_LO) & OP_MASK_VFPU_VT_LO) ++ | ((l & OP_MASK_VFPU_VT_HI1) << OP_SH_VFPU_VT_HI); ++ break; ++ ++ case 's': ++ { ++ unsigned int temp_vreg = l >> OP_SH_VFPU_VS; ++ ++ vreg = temp_vreg & OP_MASK_VFPU_VS; ++ if ((l & VFPU_OP_VT_VS_VD) == VFPU_OPCODE_VMMUL) ++ { ++ /* vmmul instructions have the RXC bit (bit 13) inverted. */ ++ if (temp_vreg & 0x20) ++ vreg = temp_vreg & 0x5f; ++ else ++ vreg |= 0x20; ++ } ++ } ++ break; ++ ++ case 't': ++ vreg = (l >> OP_SH_VFPU_VT) & OP_MASK_VFPU_VT; ++ break; ++ } ++ ++ /* The next char is the register set vreg comes from. */ ++ d++; ++ switch (*d) ++ { ++ case '0': ++ (*info->fprintf_func) (info->stream, "%s.s", ++ vfpu_sreg_names[vreg]); ++ break; ++ ++ case '1': ++ (*info->fprintf_func) (info->stream, "%s.p", ++ vfpu_vpreg_names[vreg]); ++ break; ++ ++ case '2': ++ (*info->fprintf_func) (info->stream, "%s.t", ++ vfpu_vtreg_names[vreg]); ++ break; ++ ++ case '3': ++ (*info->fprintf_func) (info->stream, "%s.q", ++ vfpu_vqreg_names[vreg]); ++ break; ++ ++ case '5': ++ (*info->fprintf_func) (info->stream, "%s.p", ++ vfpu_mpreg_names[vreg]); ++ break; ++ ++ case '6': ++ (*info->fprintf_func) (info->stream, "%s.t", ++ vfpu_mtreg_names[vreg]); ++ break; ++ ++ case '7': ++ (*info->fprintf_func) (info->stream, "%s.q", ++ vfpu_mqreg_names[vreg]); ++ break; ++ ++ default: ++ /* xgettext:c-format */ ++ (*info->fprintf_func) (info->stream, ++ _("# internal error, undefined vreg modifier(%c)"), ++ *d); ++ break; ++ } ++ ++ /* The last char is unused for disassembly. */ ++ d++; ++ } ++ break; ++ ++ case 'z': ++ (*info->fprintf_func) (info->stream, "%s", ++ vfpu_rwb_names[(l >> OP_SH_VFPU_RWB) & OP_MASK_VFPU_RWB]); ++ break; ++ } ++ break; + default: /* xgettext:c-format */ |