X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=opcodes%2Fh8300-dis.c;h=8290ab7a02c554813d3bd0e04acdd01614967ced;hb=c4b943d7aed5edbfc31aa1e9dc9e7bcf108d76a0;hp=769c12e37d43206225e4f5af2b70d5ff18c3ee14;hpb=0fd3a4776c8f607cc778cde80f9215089d36387e;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/h8300-dis.c b/opcodes/h8300-dis.c index 769c12e37d..8290ab7a02 100644 --- a/opcodes/h8300-dis.c +++ b/opcodes/h8300-dis.c @@ -1,16 +1,17 @@ /* Disassemble h8300 instructions. - Copyright 1993, 1994, 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. + Copyright (C) 1993-2016 Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify + This file is part of the GNU opcodes library. + + This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + the Free Software Foundation; either version 3, or (at your option) + any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + It is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software @@ -51,19 +52,6 @@ bfd_h8_disassemble_init (void) for (p = h8_opcodes, pi = h8_instructions; p->name; p++, pi++) { - int n1 = 0; - int n2 = 0; - - if ((int) p->data.nib[0] < 16) - n1 = (int) p->data.nib[0]; - else - n1 = 0; - - if ((int) p->data.nib[1] < 16) - n2 = (int) p->data.nib[1]; - else - n2 = 0; - /* Just make sure there are an even number of nibbles in it, and that the count is the same as the length. */ for (i = 0; p->data.nib[i] != (op_type) E; i++) @@ -281,14 +269,14 @@ print_one_arg (disassemble_info *info, { outfn (stream, ".%s%d (0x%lx)", (short) cst > 0 ? "+" : "", - (short) cst, + (short) cst, (long)(addr + (short) cst + len)); } else { outfn (stream, ".%s%d (0x%lx)", (char) cst > 0 ? "+" : "", - (char) cst, + (char) cst, (long)(addr + (char) cst + len)); } } @@ -297,19 +285,19 @@ print_one_arg (disassemble_info *info, else if ((x & MODE) == INDEXB) /* Always take low half of reg. */ - outfn (stream, "@(0x%x:%d,%s.b)", cst, cstlen, + outfn (stream, "@(0x%x:%d,%s.b)", cst, cstlen, regnames[rdisp_n < 8 ? rdisp_n + 8 : rdisp_n]); else if ((x & MODE) == INDEXW) /* Always take low half of reg. */ - outfn (stream, "@(0x%x:%d,%s.w)", cst, cstlen, + outfn (stream, "@(0x%x:%d,%s.w)", cst, cstlen, wregnames[rdisp_n < 8 ? rdisp_n : rdisp_n - 8]); else if ((x & MODE) == INDEXL) outfn (stream, "@(0x%x:%d,%s.l)", cst, cstlen, lregnames[rdisp_n]); else if (x & CTRL) - outfn (stream, cregnames[rn]); + outfn (stream, "%s", cregnames[rn]); else if ((x & MODE) == CCR) outfn (stream, "ccr"); @@ -362,7 +350,7 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach) for (qi = h8_instructions; qi->opcode->name; qi++) { const struct h8_opcode *q = qi->opcode; - op_type *nib = q->data.nib; + const op_type *nib = q->data.nib; unsigned int len = 0; while (1) @@ -472,8 +460,8 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach) || (looking_for & MODE) == INDEXW || (looking_for & MODE) == INDEXL) { - extract_immediate (stream, looking_for, thisnib, - data + len / 2, cst + opnr, + extract_immediate (stream, looking_for, thisnib, + data + len / 2, cst + opnr, cstlen + opnr, q); /* Even address == bra, odd == bra/s. */ if (q->how == O (O_BRAS, SB)) @@ -541,8 +529,8 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach) { int i = len / 2; - cst[opnr] = ((data[i] << 24) - | (data[i + 1] << 16) + cst[opnr] = ((data[i] << 24) + | (data[i + 1] << 16) | (data[i + 2] << 8) | (data[i + 3])); @@ -552,14 +540,10 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach) { int i = len / 2; - cst[opnr] = + cst[opnr] = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]); cstlen[opnr] = 24; } - else if (looking_for & IGNORE) - { - ; - } else if (looking_for & DISPREG) { dispregno[opnr] = thisnib & 7; @@ -638,35 +622,35 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach) regno[1]); return qi->length; } - if (strncmp (q->name, "mova", 4) == 0) + if (CONST_STRNEQ (q->name, "mova")) { - op_type *args = q->args.nib; + const op_type *args = q->args.nib; if (args[1] == (op_type) E) { /* Short form. */ - print_one_arg (info, addr, args[0], cst[0], - cstlen[0], dispregno[0], regno[0], + print_one_arg (info, addr, args[0], cst[0], + cstlen[0], dispregno[0], regno[0], pregnames, qi->length); outfn (stream, ",er%d", dispregno[0]); } else { outfn (stream, "@(0x%x:%d,", cst[0], cstlen[0]); - print_one_arg (info, addr, args[1], cst[1], - cstlen[1], dispregno[1], regno[1], + print_one_arg (info, addr, args[1], cst[1], + cstlen[1], dispregno[1], regno[1], pregnames, qi->length); outfn (stream, ".%c),", (args[0] & MODE) == INDEXB ? 'b' : 'w'); - print_one_arg (info, addr, args[2], cst[2], - cstlen[2], dispregno[2], regno[2], + print_one_arg (info, addr, args[2], cst[2], + cstlen[2], dispregno[2], regno[2], pregnames, qi->length); } return qi->length; } /* Fill in the args. */ { - op_type *args = q->args.nib; + const op_type *args = q->args.nib; int hadone = 0; int nargs; @@ -681,7 +665,7 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach) return qi->length; } - for (nargs = 0; + for (nargs = 0; nargs < 3 && args[nargs] != (op_type) E; nargs++) {