aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/ppc-dis.c49
2 files changed, 29 insertions, 26 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 0fb4e0d..bf775b5 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,11 @@
2019-04-07 Alan Modra <amodra@gmail.com>
+ * ppc-dis.c (print_insn_powerpc): Use a tiny state machine
+ op_separator to control printing of spaces, comma and parens
+ rather than need_comma, need_paren and spaces vars.
+
+2019-04-07 Alan Modra <amodra@gmail.com>
+
PR 24421
* arm-dis.c (print_insn_coprocessor): Correct bracket placement.
(print_insn_neon, print_insn_arm): Likewise.
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index f42d5b2..cb10b23 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -720,8 +720,17 @@ print_insn_powerpc (bfd_vma memaddr,
{
const unsigned char *opindex;
const struct powerpc_operand *operand;
- int need_comma;
- int need_paren;
+ enum {
+ need_comma = 0,
+ need_1space = 1,
+ need_2spaces = 2,
+ need_3spaces = 3,
+ need_4spaces = 4,
+ need_5spaces = 5,
+ need_6spaces = 6,
+ need_7spaces = 7,
+ need_paren
+ } op_separator;
int skip_optional;
int spaces;
@@ -732,8 +741,7 @@ print_insn_powerpc (bfd_vma memaddr,
spaces = 1;
/* Now extract and print the operands. */
- need_comma = 0;
- need_paren = 0;
+ op_separator = spaces;
skip_optional = -1;
for (opindex = opcode->operands; *opindex != 0; opindex++)
{
@@ -754,16 +762,12 @@ print_insn_powerpc (bfd_vma memaddr,
value = operand_value_powerpc (operand, insn, dialect);
- if (spaces)
- {
- (*info->fprintf_func) (info->stream, "%*s", spaces, " ");
- spaces = 0;
- }
- if (need_comma)
- {
- (*info->fprintf_func) (info->stream, ",");
- need_comma = 0;
- }
+ if (op_separator == need_comma)
+ (*info->fprintf_func) (info->stream, ",");
+ else if (op_separator == need_paren)
+ (*info->fprintf_func) (info->stream, "(");
+ else
+ (*info->fprintf_func) (info->stream, "%*s", op_separator, " ");
/* Print the operand as directed by the flags. */
if ((operand->flags & PPC_OPERAND_GPR) != 0
@@ -808,19 +812,12 @@ print_insn_powerpc (bfd_vma memaddr,
else
(*info->fprintf_func) (info->stream, "%" PRId64, value);
- if (need_paren)
- {
- (*info->fprintf_func) (info->stream, ")");
- need_paren = 0;
- }
+ if (op_separator == need_paren)
+ (*info->fprintf_func) (info->stream, ")");
- if ((operand->flags & PPC_OPERAND_PARENS) == 0)
- need_comma = 1;
- else
- {
- (*info->fprintf_func) (info->stream, "(");
- need_paren = 1;
- }
+ op_separator = need_comma;
+ if ((operand->flags & PPC_OPERAND_PARENS) != 0)
+ op_separator = need_paren;
}
/* We have found and printed an instruction. */