X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=cpu%2Fm32r.opc;h=30e0956eac4d7206f8da931a9224bc843c3f36da;hb=c0b0a14290e1909a6cc3febb443560c3e95562c2;hp=ab69d078c8648bfdae89ebc77197c38c8ef16308;hpb=01f0fe5e0450edf168c1f612feb93cf588e4e7ea;p=deliverable%2Fbinutils-gdb.git diff --git a/cpu/m32r.opc b/cpu/m32r.opc index ab69d078c8..30e0956eac 100644 --- a/cpu/m32r.opc +++ b/cpu/m32r.opc @@ -1,6 +1,6 @@ /* M32R opcode support. -*- C -*- - Copyright 1998, 1999, 2000, 2001, 2004, 2005 + Copyright 1998, 1999, 2000, 2001, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from @@ -8,13 +8,9 @@ This file is part of the GNU Binutils. - Contributed by Red Hat Inc; developed under contract from Fujitsu. - - This file is part of the GNU Binutils. - This program 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 + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -27,6 +23,7 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + /* This file is an addendum to m32r.cpu. Heavy use of C code isn't appropriate in .cpu files, so it resides here. This especially applies to assembly/disassembly where parsing/printing can be quite involved. @@ -126,7 +123,7 @@ parse_hi16 (CGEN_CPU_DESC cd, return MISSING_CLOSING_PARENTHESIS; ++*strp; if (errmsg == NULL - && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) + && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) { value >>= 16; value &= 0xffff; @@ -138,17 +135,17 @@ parse_hi16 (CGEN_CPU_DESC cd, { *strp += 6; errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_HI16_SLO, - & result_type, & value); + & result_type, & value); if (**strp != ')') return MISSING_CLOSING_PARENTHESIS; ++*strp; if (errmsg == NULL && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) - { - value += 0x8000; - value >>= 16; + { + value += 0x8000; + value >>= 16; value &= 0xffff; - } + } *valuep = value; return errmsg; } @@ -183,7 +180,7 @@ parse_slo16 (CGEN_CPU_DESC cd, ++*strp; if (errmsg == NULL && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) - value = ((value & 0xffff) ^ 0x8000) - 0x8000; + value = ((value & 0xffff) ^ 0x8000) - 0x8000; *valuep = value; return errmsg; } @@ -241,15 +238,38 @@ parse_ulo16 (CGEN_CPU_DESC cd, /* -- */ /* -- dis.c */ -/* Immediate values are prefixed with '#'. */ -#define CGEN_PRINT_NORMAL(cd, info, value, attrs, pc, length) \ - do \ - { \ - if (CGEN_BOOL_ATTR ((attrs), CGEN_OPERAND_HASH_PREFIX)) \ - (*info->fprintf_func) (info->stream, "#"); \ - } \ - while (0) +/* Print signed operands with '#' prefixes. */ + +static void +print_signed_with_hash_prefix (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, + void * dis_info, + long value, + unsigned int attrs ATTRIBUTE_UNUSED, + bfd_vma pc ATTRIBUTE_UNUSED, + int length ATTRIBUTE_UNUSED) +{ + disassemble_info *info = (disassemble_info *) dis_info; + + (*info->fprintf_func) (info->stream, "#"); + (*info->fprintf_func) (info->stream, "%ld", value); +} + +/* Print unsigned operands with '#' prefixes. */ + +static void +print_unsigned_with_hash_prefix (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, + void * dis_info, + long value, + unsigned int attrs ATTRIBUTE_UNUSED, + bfd_vma pc ATTRIBUTE_UNUSED, + int length ATTRIBUTE_UNUSED) +{ + disassemble_info *info = (disassemble_info *) dis_info; + + (*info->fprintf_func) (info->stream, "#"); + (*info->fprintf_func) (info->stream, "0x%lx", value); +} /* Handle '#' prefixes as operands. */ @@ -284,7 +304,7 @@ my_print_insn (CGEN_CPU_DESC cd, /* Read the base part of the insn. */ status = (*info->read_memory_func) (pc - ((!big_p && (pc & 3) != 0) ? 2 : 0), - buf, buflen, info); + buf, buflen, info); if (status != 0) { (*info->memory_error_func) (status, pc, info);