aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/disassemble.c1
-rw-r--r--opcodes/s390-dis.c87
2 files changed, 72 insertions, 16 deletions
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index 9c0daca..bd37f04 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -721,6 +721,7 @@ disassemble_init_for_target (struct disassemble_info * info)
#ifdef ARCH_s390
case bfd_arch_s390:
disassemble_init_s390 (info);
+ info->created_styled_output = true;
break;
#endif
#ifdef ARCH_nds32
diff --git a/opcodes/s390-dis.c b/opcodes/s390-dis.c
index 03715ed..df44efb 100644
--- a/opcodes/s390-dis.c
+++ b/opcodes/s390-dis.c
@@ -186,7 +186,8 @@ s390_print_insn_with_opcode (bfd_vma memaddr,
char separator;
/* Mnemonic. */
- info->fprintf_func (info->stream, "%s", opcode->name);
+ info->fprintf_styled_func (info->stream, dis_style_mnemonic,
+ "%s", opcode->name);
/* Operands. */
separator = '\t';
@@ -222,24 +223,60 @@ s390_print_insn_with_opcode (bfd_vma memaddr,
}
if (flags & S390_OPERAND_GPR)
- info->fprintf_func (info->stream, "%c%%r%u", separator, val.u);
+ {
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
+ info->fprintf_styled_func (info->stream, dis_style_register,
+ "%%r%u", val.u);
+ }
else if (flags & S390_OPERAND_FPR)
- info->fprintf_func (info->stream, "%c%%f%u", separator, val.u);
+ {
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
+ info->fprintf_styled_func (info->stream, dis_style_register,
+ "%%f%u", val.u);
+ }
else if (flags & S390_OPERAND_VR)
- info->fprintf_func (info->stream, "%c%%v%i", separator, val.u);
+ {
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
+ info->fprintf_styled_func (info->stream, dis_style_register,
+ "%%v%i", val.u);
+ }
else if (flags & S390_OPERAND_AR)
- info->fprintf_func (info->stream, "%c%%a%u", separator, val.u);
+ {
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
+ info->fprintf_styled_func (info->stream, dis_style_register,
+ "%%a%u", val.u);
+ }
else if (flags & S390_OPERAND_CR)
- info->fprintf_func (info->stream, "%c%%c%u", separator, val.u);
+ {
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
+ info->fprintf_styled_func (info->stream, dis_style_register,
+ "%%c%u", val.u);
+ }
else if (flags & S390_OPERAND_PCREL)
{
- info->fprintf_func (info->stream, "%c", separator);
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
info->print_address_func (memaddr + val.i + val.i, info);
}
else if (flags & S390_OPERAND_SIGNED)
- info->fprintf_func (info->stream, "%c%i", separator, val.i);
+ {
+ enum disassembler_style style;
+
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
+ style = ((flags & S390_OPERAND_DISP)
+ ? dis_style_address_offset : dis_style_immediate);
+ info->fprintf_styled_func (info->stream, style, "%i", val.i);
+ }
else
{
+ enum disassembler_style style;
+
if (flags & S390_OPERAND_OR1)
val.u &= ~1;
if (flags & S390_OPERAND_OR2)
@@ -251,14 +288,18 @@ s390_print_insn_with_opcode (bfd_vma memaddr,
&& val.u == 0
&& opindex[1] == 0)
break;
- info->fprintf_func (info->stream, "%c%u", separator, val.u);
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "%c", separator);
+ style = ((flags & S390_OPERAND_DISP)
+ ? dis_style_address_offset : dis_style_immediate);
+ info->fprintf_styled_func (info->stream, style, "%u", val.u);
}
if (flags & S390_OPERAND_DISP)
separator = '(';
else if (flags & S390_OPERAND_BASE)
{
- info->fprintf_func (info->stream, ")");
+ info->fprintf_styled_func (info->stream, dis_style_text, ")");
separator = ',';
}
else
@@ -361,19 +402,33 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info)
value = (value << 8) + (unsigned int) buffer[1];
value = (value << 8) + (unsigned int) buffer[2];
value = (value << 8) + (unsigned int) buffer[3];
- info->fprintf_func (info->stream, ".long\t0x%08x", value);
+ info->fprintf_styled_func (info->stream, dis_style_assembler_directive,
+ ".long");
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "\t");
+ info->fprintf_styled_func (info->stream, dis_style_immediate,
+ "0x%08x", value);
return 4;
case 2:
value = (unsigned int) buffer[0];
value = (value << 8) + (unsigned int) buffer[1];
- info->fprintf_func (info->stream, ".short\t0x%04x", value);
+ info->fprintf_styled_func (info->stream, dis_style_assembler_directive,
+ ".short");
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "\t");
+ info->fprintf_styled_func (info->stream, dis_style_immediate,
+ "0x%04x", value);
return 2;
default:
- info->fprintf_func (info->stream, ".byte\t0x%02x",
- (unsigned int) buffer[0]);
+ info->fprintf_styled_func (info->stream, dis_style_assembler_directive,
+ ".byte");
+ info->fprintf_styled_func (info->stream, dis_style_text,
+ "\t");
+ info->fprintf_styled_func (info->stream, dis_style_immediate,
+ "0x%02x", (unsigned int) buffer[0]);
for (i = 1; i < bytes_to_dump; i++)
- info->fprintf_func (info->stream, ",0x%02x",
- (unsigned int) buffer[i]);
+ info->fprintf_styled_func (info->stream, dis_style_immediate,
+ "0x%02x", (unsigned int) buffer[i]);
return bytes_to_dump;
}
return 0;