diff options
Diffstat (limited to 'opcodes/mips-dis.c')
-rw-r--r-- | opcodes/mips-dis.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c index a528e96..ca65d71 100644 --- a/opcodes/mips-dis.c +++ b/opcodes/mips-dis.c @@ -973,6 +973,37 @@ print_insn_args (const char *d, (*info->fprintf_func) (info->stream, "%d", op); break; + case 'a': /* 8-bit signed offset in bit 6 */ + delta = (l >> OP_SH_OFFSET_A) & OP_MASK_OFFSET_A; + if (delta & 0x80) + delta |= ~OP_MASK_OFFSET_A; + (*info->fprintf_func) (info->stream, "%d", delta); + break; + + case 'b': /* 8-bit signed offset in bit 3 */ + delta = (l >> OP_SH_OFFSET_B) & OP_MASK_OFFSET_B; + if (delta & 0x80) + delta |= ~OP_MASK_OFFSET_B; + (*info->fprintf_func) (info->stream, "%d", delta); + break; + + case 'c': /* 9-bit signed offset in bit 6 */ + delta = (l >> OP_SH_OFFSET_C) & OP_MASK_OFFSET_C; + if (delta & 0x100) + delta |= ~OP_MASK_OFFSET_C; + (*info->fprintf_func) (info->stream, "%d", delta); + break; + + case 'z': + (*info->fprintf_func) (info->stream, "%s", + mips_gpr_names[(l >> OP_SH_RZ) & OP_MASK_RZ]); + break; + + case 'Z': + (*info->fprintf_func) (info->stream, "%s", + mips_fpr_names[(l >> OP_SH_FZ) & OP_MASK_FZ]); + break; + default: /* xgettext:c-format */ (*info->fprintf_func) (info->stream, |