From a0bd404eacfd838498f1fac90997f732735cc00a Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Mon, 15 Dec 2003 22:01:43 +0000 Subject: [PATCH] * z8k-dis.c (intr_names): Removed. (print_intr, print_flags): New functions. (unparse_instr): Use new functions. --- opcodes/ChangeLog | 6 +++++ opcodes/z8k-dis.c | 69 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 61 insertions(+), 14 deletions(-) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 7bf5b45575..40eed6e100 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2003-12-15 Christian Groessler + + * z8k-dis.c (intr_names): Removed. + (print_intr, print_flags): New functions. + (unparse_instr): Use new functions. + 2003-12-15 Kazuhiro Inaoka * m32r-opc.c: Regenerate. diff --git a/opcodes/z8k-dis.c b/opcodes/z8k-dis.c index 02f5dcb770..0ac0fc8091 100644 --- a/opcodes/z8k-dis.c +++ b/opcodes/z8k-dis.c @@ -26,7 +26,7 @@ #include "z8k-opc.h" #include - + typedef struct { /* These are all indexed by nibble number (i.e only every other entry @@ -472,12 +472,53 @@ unpack_instr (instr_data_s *instr_data, int is_segmented, disassemble_info *info } } -static char *intr_names[] = { - "all", /* 0 */ - "vi", /* 1 */ - "nvi", /* 2 */ - "none" /* 3 */ -}; +static void +print_intr(char *tmp_str, unsigned long interrupts) +{ + int comma = 0; + + *tmp_str = 0; + if (! (interrupts & 2)) + { + strcat (tmp_str, "vi"); + comma = 1; + } + if (! (interrupts & 1)) + { + if (comma) strcat (tmp_str, ","); + strcat (tmp_str, "nvi"); + } +} + +static void +print_flags(char *tmp_str, unsigned long flags) +{ + int comma = 0; + + *tmp_str = 0; + if (flags & 8) + { + strcat (tmp_str, "c"); + comma = 1; + } + if (flags & 4) + { + if (comma) strcat (tmp_str, ","); + strcat (tmp_str, "z"); + comma = 1; + } + if (flags & 2) + { + if (comma) strcat (tmp_str, ","); + strcat (tmp_str, "s"); + comma = 1; + } + if (flags & 1) + { + if (comma) strcat (tmp_str, ","); + strcat (tmp_str, "p"); + } +} static void unparse_instr (instr_data_s *instr_data, int is_segmented) @@ -529,12 +570,12 @@ unparse_instr (instr_data_s *instr_data, int is_segmented) strcat (out_str, tmp_str); break; case CLASS_IMM: - if (datum_value == ARG_IMM2) /* True with EI/DI instructions only. */ - { - sprintf (tmp_str, "%s", intr_names[instr_data->interrupts]); - strcat (out_str, tmp_str); - break; - } + if (datum_value == ARG_IMM2) /* True with EI/DI instructions only. */ + { + print_intr (tmp_str, instr_data->interrupts); + strcat (out_str, tmp_str); + break; + } sprintf (tmp_str, "#0x%0lx", instr_data->immediate); strcat (out_str, tmp_str); break; @@ -563,7 +604,7 @@ unparse_instr (instr_data_s *instr_data, int is_segmented) strcat (out_str, tmp_str); break; case CLASS_FLAGS: - sprintf (tmp_str, "0x%0lx", instr_data->flags); + print_flags(tmp_str, instr_data->flags); strcat (out_str, tmp_str); break; case CLASS_REG_BYTE: