X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=opcodes%2Ffrv-asm.c;h=13cb41cf9938cf260a788b4b08d2c32e28ae3739;hb=36231dfc188426d9b887af2d1c6c2cbb1c746cb3;hp=635f9c742c650553cd7de9219679a2c7988bd979;hpb=33b71eeb2e25ed4cb83a1fe43cc3d0625dd51e40;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/frv-asm.c b/opcodes/frv-asm.c index 635f9c742c..13cb41cf99 100644 --- a/opcodes/frv-asm.c +++ b/opcodes/frv-asm.c @@ -1,26 +1,28 @@ +/* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ /* Assembler interface for targets using CGEN. -*- C -*- CGEN: Cpu tools GENerator -THIS FILE IS MACHINE GENERATED WITH CGEN. -- the resultant file is machine generated, cgen-asm.in isn't + THIS FILE IS MACHINE GENERATED WITH CGEN. + - the resultant file is machine generated, cgen-asm.in isn't -Copyright 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. -This file is part of the GNU Binutils and GDB, the GNU debugger. + This file is part of libopcodes. -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, or (at your option) -any later version. + 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 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 Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* ??? Eventually more and more of this stuff can go to cpu-independent files. Keep that in mind. */ @@ -48,31 +50,6 @@ static const char * parse_insn_normal /* -- assembler routines inserted here. */ /* -- asm.c */ -static const char * parse_ulo16 - PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *)); -static const char * parse_uslo16 - PARAMS ((CGEN_CPU_DESC, const char **, int, signed long *)); -static const char * parse_uhi16 - PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *)); -static long parse_register_number - PARAMS ((const char **)); -static const char * parse_spr - PARAMS ((CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *)); -static const char * parse_d12 - PARAMS ((CGEN_CPU_DESC, const char **, int, long *)); -static const char * parse_s12 - PARAMS ((CGEN_CPU_DESC, const char **, int, long *)); -static const char * parse_u12 - PARAMS ((CGEN_CPU_DESC, const char **, int, long *)); -static const char * parse_even_register - PARAMS ((CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *)); -static const char * parse_A0 - PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *)); -static const char * parse_A1 - PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *)); -static const char * parse_A - PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *, long)); - inline static const char * parse_symbolic_address (CGEN_CPU_DESC cd, const char **strp, @@ -123,10 +100,10 @@ parse_ldd_annotation (CGEN_CPU_DESC cd, return errmsg; } } - + while (**strp == ' ' || **strp == '\t') ++*strp; - + if (**strp != '@') return "missing `@'"; @@ -162,10 +139,10 @@ parse_call_annotation (CGEN_CPU_DESC cd, return errmsg; } } - + while (**strp == ' ' || **strp == '\t') ++*strp; - + if (**strp != '@') return "missing `@'"; @@ -201,10 +178,10 @@ parse_ld_annotation (CGEN_CPU_DESC cd, return errmsg; } } - + while (**strp == ' ' || **strp == '\t') ++*strp; - + if (**strp != '@') return "missing `@'"; @@ -214,23 +191,22 @@ parse_ld_annotation (CGEN_CPU_DESC cd, } static const char * -parse_ulo16 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - unsigned long *valuep; +parse_ulo16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep) { const char *errmsg; enum cgen_parse_operand_result result_type; bfd_vma value; - + if (**strp == '#' || **strp == '%') { if (strncasecmp (*strp + 1, "lo(", 3) == 0) { *strp += 4; errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_FRV_LO16, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing `)'"; ++*strp; @@ -245,7 +221,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 9; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GPRELLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -257,7 +233,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 7; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -269,7 +245,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 15; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -281,7 +257,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 10; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -293,7 +269,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 18; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -305,7 +281,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 14; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSDESCLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -317,7 +293,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 11; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_TLSMOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -329,7 +305,7 @@ parse_ulo16 (cd, strp, opindex, valuep) *strp += 13; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -341,23 +317,22 @@ parse_ulo16 (cd, strp, opindex, valuep) } static const char * -parse_uslo16 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - signed long *valuep; +parse_uslo16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + signed long *valuep) { const char *errmsg; enum cgen_parse_operand_result result_type; bfd_vma value; - + if (**strp == '#' || **strp == '%') { if (strncasecmp (*strp + 1, "lo(", 3) == 0) { *strp += 4; errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_FRV_LO16, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing `)'"; ++*strp; @@ -372,7 +347,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 9; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GPRELLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -384,7 +359,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 7; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -396,7 +371,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 15; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -408,7 +383,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 10; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -420,7 +395,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 18; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -432,7 +407,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 14; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSDESCLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -444,7 +419,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 11; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_TLSMOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -456,7 +431,7 @@ parse_uslo16 (cd, strp, opindex, valuep) *strp += 13; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSOFFLO, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -468,34 +443,33 @@ parse_uslo16 (cd, strp, opindex, valuep) } static const char * -parse_uhi16 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - unsigned long *valuep; +parse_uhi16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep) { const char *errmsg; enum cgen_parse_operand_result result_type; bfd_vma value; - + if (**strp == '#' || **strp == '%') { if (strncasecmp (*strp + 1, "hi(", 3) == 0) { *strp += 4; errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_FRV_HI16, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing `)'"; ++*strp; if (errmsg == NULL && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) { - /* If bfd_vma is wider than 32 bits, but we have a sign- - or zero-extension, truncate it. */ - if (value >= - ((bfd_vma)1 << 31) - || value <= ((bfd_vma)1 << 31) - (bfd_vma)1) - value &= (((bfd_vma)1 << 16) << 16) - 1; + /* If value is wider than 32 bits then be + careful about how we extract bits 16-31. */ + if (sizeof (value) > 4) + value &= (((bfd_vma)1 << 16) << 16) - 1; + value >>= 16; } *valuep = value; @@ -506,7 +480,7 @@ parse_uhi16 (cd, strp, opindex, valuep) *strp += 9; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GPRELHI, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -518,7 +492,7 @@ parse_uhi16 (cd, strp, opindex, valuep) *strp += 7; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTHI, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -530,7 +504,7 @@ parse_uhi16 (cd, strp, opindex, valuep) *strp += 15; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTHI, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -542,7 +516,7 @@ parse_uhi16 (cd, strp, opindex, valuep) *strp += 10; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTOFFHI, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -554,7 +528,7 @@ parse_uhi16 (cd, strp, opindex, valuep) *strp += 18; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTOFFHI, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -578,7 +552,7 @@ parse_uhi16 (cd, strp, opindex, valuep) *strp += 11; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_TLSMOFFHI, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -590,7 +564,7 @@ parse_uhi16 (cd, strp, opindex, valuep) *strp += 13; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSOFFHI, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -602,10 +576,10 @@ parse_uhi16 (cd, strp, opindex, valuep) } static long -parse_register_number (strp) - const char **strp; +parse_register_number (const char **strp) { int regno; + if (**strp < '0' || **strp > '9') return -1; /* error */ @@ -617,11 +591,10 @@ parse_register_number (strp) } static const char * -parse_spr (cd, strp, table, valuep) - CGEN_CPU_DESC cd; - const char **strp; - CGEN_KEYWORD * table; - long *valuep; +parse_spr (CGEN_CPU_DESC cd, + const char **strp, + CGEN_KEYWORD * table, + long *valuep) { const char *save_strp; long regno; @@ -632,10 +605,10 @@ parse_spr (cd, strp, table, valuep) *strp += 4; regno = parse_register_number (strp); if (**strp != ']') - return "missing `]'"; + return _("missing `]'"); ++*strp; if (! spr_valid (regno)) - return "Special purpose register number is out of range"; + return _("Special purpose register number is out of range"); *valuep = regno; return NULL; } @@ -645,7 +618,7 @@ parse_spr (cd, strp, table, valuep) if (regno != -1) { if (! spr_valid (regno)) - return "Special purpose register number is out of range"; + return _("Special purpose register number is out of range"); *valuep = regno; return NULL; } @@ -655,16 +628,15 @@ parse_spr (cd, strp, table, valuep) } static const char * -parse_d12 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - long *valuep; +parse_d12 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + long *valuep) { const char *errmsg; enum cgen_parse_operand_result result_type; bfd_vma value; - + /* Check for small data reference. */ if (**strp == '#' || **strp == '%') { @@ -673,7 +645,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 9; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GPREL12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing `)'"; ++*strp; @@ -685,7 +657,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 7; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOT12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -697,7 +669,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 15; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOT12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -709,7 +681,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 10; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -721,7 +693,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 18; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -733,7 +705,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 14; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSDESC12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -745,7 +717,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 11; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_TLSMOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -757,7 +729,7 @@ parse_d12 (cd, strp, opindex, valuep) *strp += 13; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -769,16 +741,15 @@ parse_d12 (cd, strp, opindex, valuep) } static const char * -parse_s12 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - long *valuep; +parse_s12 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + long *valuep) { const char *errmsg; enum cgen_parse_operand_result result_type; bfd_vma value; - + /* Check for small data reference. */ if (**strp == '#' || **strp == '%') { @@ -787,7 +758,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 9; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GPREL12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing `)'"; ++*strp; @@ -799,7 +770,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 7; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOT12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -811,7 +782,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 15; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOT12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -823,7 +794,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 10; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -835,7 +806,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 18; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_FUNCDESC_GOTOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -847,7 +818,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 14; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSDESC12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -859,7 +830,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 11; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_TLSMOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -871,7 +842,7 @@ parse_s12 (cd, strp, opindex, valuep) *strp += 13; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GOTTLSOFF12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing ')'"; ++*strp; @@ -886,16 +857,15 @@ parse_s12 (cd, strp, opindex, valuep) } static const char * -parse_u12 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - long *valuep; +parse_u12 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + long *valuep) { const char *errmsg; enum cgen_parse_operand_result result_type; bfd_vma value; - + /* Check for small data reference. */ if ((**strp == '#' || **strp == '%') && strncasecmp (*strp + 1, "gprel12(", 8) == 0) @@ -903,7 +873,7 @@ parse_u12 (cd, strp, opindex, valuep) *strp += 9; errmsg = parse_symbolic_address (cd, strp, opindex, BFD_RELOC_FRV_GPRELU12, - &result_type, &value); + & result_type, & value); if (**strp != ')') return "missing `)'"; ++*strp; @@ -919,15 +889,14 @@ parse_u12 (cd, strp, opindex, valuep) } static const char * -parse_A (cd, strp, opindex, valuep, A) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - unsigned long *valuep; - long A; +parse_A (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep, + unsigned long A) { const char *errmsg; - + if (**strp == '#') ++*strp; @@ -936,37 +905,34 @@ parse_A (cd, strp, opindex, valuep, A) return errmsg; if (*valuep != A) - return "Value of A operand must be 0 or 1"; + return _("Value of A operand must be 0 or 1"); return NULL; } static const char * -parse_A0 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - unsigned long *valuep; +parse_A0 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep) { return parse_A (cd, strp, opindex, valuep, 0); } static const char * -parse_A1 (cd, strp, opindex, valuep) - CGEN_CPU_DESC cd; - const char **strp; - int opindex; - unsigned long *valuep; +parse_A1 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep) { return parse_A (cd, strp, opindex, valuep, 1); } static const char * -parse_even_register (cd, strP, tableP, valueP) - CGEN_CPU_DESC cd; - const char ** strP; - CGEN_KEYWORD * tableP; - long * valueP; +parse_even_register (CGEN_CPU_DESC cd, + const char ** strP, + CGEN_KEYWORD * tableP, + long * valueP) { const char * errmsg; const char * saved_star_strP = * strP; @@ -992,7 +958,7 @@ parse_call_label (CGEN_CPU_DESC cd, { const char *errmsg; bfd_vma value; - + /* Check for small data reference. */ if (opinfo == 0 && (**strp == '#' || **strp == '%')) { @@ -1003,7 +969,7 @@ parse_call_label (CGEN_CPU_DESC cd, BFD_RELOC_FRV_GETTLSOFF, resultp, &value); if (**strp != ')') - return "missing `)'"; + return _("missing `)'"); ++*strp; *valuep = value; return errmsg; @@ -1016,7 +982,7 @@ parse_call_label (CGEN_CPU_DESC cd, /* -- */ const char * frv_cgen_parse_operand - PARAMS ((CGEN_CPU_DESC, int, const char **, CGEN_FIELDS *)); + (CGEN_CPU_DESC, int, const char **, CGEN_FIELDS *); /* Main entry point for operand parsing. @@ -1032,11 +998,10 @@ const char * frv_cgen_parse_operand the handlers. */ const char * -frv_cgen_parse_operand (cd, opindex, strp, fields) - CGEN_CPU_DESC cd; - int opindex; - const char ** strp; - CGEN_FIELDS * fields; +frv_cgen_parse_operand (CGEN_CPU_DESC cd, + int opindex, + const char ** strp, + CGEN_FIELDS * fields) { const char * errmsg = NULL; /* Used by scalar operands that still need to be parsed. */ @@ -1229,14 +1194,14 @@ frv_cgen_parse_operand (cd, opindex, strp, fields) break; case FRV_OPERAND_LABEL16 : { - bfd_vma value; + bfd_vma value = 0; errmsg = cgen_parse_address (cd, strp, FRV_OPERAND_LABEL16, 0, NULL, & value); fields->f_label16 = value; } break; case FRV_OPERAND_LABEL24 : { - bfd_vma value; + bfd_vma value = 0; errmsg = parse_call_label (cd, strp, FRV_OPERAND_LABEL24, 0, NULL, & value); fields->f_label24 = value; } @@ -1295,26 +1260,30 @@ frv_cgen_parse_operand (cd, opindex, strp, fields) default : /* xgettext:c-format */ - fprintf (stderr, _("Unrecognized field %d while parsing.\n"), opindex); + opcodes_error_handler + (_("internal error: unrecognized field %d while parsing"), + opindex); abort (); } return errmsg; } -cgen_parse_fn * const frv_cgen_parse_handlers[] = +cgen_parse_fn * const frv_cgen_parse_handlers[] = { parse_insn_normal, }; void -frv_cgen_init_asm (cd) - CGEN_CPU_DESC cd; +frv_cgen_init_asm (CGEN_CPU_DESC cd) { frv_cgen_init_opcode_table (cd); frv_cgen_init_ibld_table (cd); cd->parse_handlers = & frv_cgen_parse_handlers[0]; cd->parse_operand = frv_cgen_parse_operand; +#ifdef CGEN_ASM_INIT_HOOK +CGEN_ASM_INIT_HOOK +#endif } @@ -1330,9 +1299,9 @@ frv_cgen_init_asm (cd) Returns NULL for success, an error message for failure. */ -char * +char * frv_cgen_build_insn_regex (CGEN_INSN *insn) -{ +{ CGEN_OPCODE *opc = (CGEN_OPCODE *) CGEN_INSN_OPCODE (insn); const char *mnem = CGEN_INSN_MNEMONIC (insn); char rxbuf[CGEN_MAX_RX_ELEMENTS]; @@ -1371,18 +1340,18 @@ frv_cgen_build_insn_regex (CGEN_INSN *insn) /* Copy any remaining literals from the syntax string into the rx. */ for(; * syn != 0 && rx <= rxbuf + (CGEN_MAX_RX_ELEMENTS - 7 - 4); ++syn) { - if (CGEN_SYNTAX_CHAR_P (* syn)) + if (CGEN_SYNTAX_CHAR_P (* syn)) { char c = CGEN_SYNTAX_CHAR (* syn); - switch (c) + switch (c) { /* Escape any regex metacharacters in the syntax. */ - case '.': case '[': case '\\': - case '*': case '^': case '$': + case '.': case '[': case '\\': + case '*': case '^': case '$': #ifdef CGEN_ESCAPE_EXTENDED_REGEX - case '?': case '{': case '}': + case '?': case '{': case '}': case '(': case ')': case '*': case '|': case '+': case ']': #endif @@ -1412,20 +1381,20 @@ frv_cgen_build_insn_regex (CGEN_INSN *insn) } /* Trailing whitespace ok. */ - * rx++ = '['; - * rx++ = ' '; - * rx++ = '\t'; - * rx++ = ']'; - * rx++ = '*'; + * rx++ = '['; + * rx++ = ' '; + * rx++ = '\t'; + * rx++ = ']'; + * rx++ = '*'; /* But anchor it after that. */ - * rx++ = '$'; + * rx++ = '$'; * rx = '\0'; CGEN_INSN_RX (insn) = xmalloc (sizeof (regex_t)); reg_err = regcomp ((regex_t *) CGEN_INSN_RX (insn), rxbuf, REG_NOSUB); - if (reg_err == 0) + if (reg_err == 0) return NULL; else { @@ -1543,9 +1512,11 @@ parse_insn_normal (CGEN_CPU_DESC cd, continue; } +#ifdef CGEN_MNEMONIC_OPERANDS + (void) past_opcode_p; +#endif /* We have an operand of some sort. */ - errmsg = cd->parse_operand (cd, CGEN_SYNTAX_FIELD (*syn), - &str, fields); + errmsg = cd->parse_operand (cd, CGEN_SYNTAX_FIELD (*syn), &str, fields); if (errmsg) return errmsg; @@ -1622,7 +1593,7 @@ frv_cgen_assemble_insn (CGEN_CPU_DESC cd, const CGEN_INSN *insn = ilist->insn; recognized_mnemonic = 1; -#ifdef CGEN_VALIDATE_INSN_SUPPORTED +#ifdef CGEN_VALIDATE_INSN_SUPPORTED /* Not usually needed as unsupported opcodes shouldn't be in the hash lists. */ /* Is this insn supported by the selected cpu? */ @@ -1662,60 +1633,41 @@ frv_cgen_assemble_insn (CGEN_CPU_DESC cd, { static char errbuf[150]; -#ifdef CGEN_VERBOSE_ASSEMBLER_ERRORS const char *tmp_errmsg; - - /* If requesting verbose error messages, use insert_errmsg. - Failing that, use parse_errmsg. */ - tmp_errmsg = (insert_errmsg ? insert_errmsg : - parse_errmsg ? parse_errmsg : - recognized_mnemonic ? - _("unrecognized form of instruction") : - _("unrecognized instruction")); - - if (strlen (start) > 50) - /* xgettext:c-format */ - sprintf (errbuf, "%s `%.50s...'", tmp_errmsg, start); - else - /* xgettext:c-format */ - sprintf (errbuf, "%s `%.50s'", tmp_errmsg, start); +#ifdef CGEN_VERBOSE_ASSEMBLER_ERRORS +#define be_verbose 1 #else - if (strlen (start) > 50) - /* xgettext:c-format */ - sprintf (errbuf, _("bad instruction `%.50s...'"), start); - else - /* xgettext:c-format */ - sprintf (errbuf, _("bad instruction `%.50s'"), start); +#define be_verbose 0 #endif - + + if (be_verbose) + { + /* If requesting verbose error messages, use insert_errmsg. + Failing that, use parse_errmsg. */ + tmp_errmsg = (insert_errmsg ? insert_errmsg : + parse_errmsg ? parse_errmsg : + recognized_mnemonic ? + _("unrecognized form of instruction") : + _("unrecognized instruction")); + + if (strlen (start) > 50) + /* xgettext:c-format */ + sprintf (errbuf, "%s `%.50s...'", tmp_errmsg, start); + else + /* xgettext:c-format */ + sprintf (errbuf, "%s `%.50s'", tmp_errmsg, start); + } + else + { + if (strlen (start) > 50) + /* xgettext:c-format */ + sprintf (errbuf, _("bad instruction `%.50s...'"), start); + else + /* xgettext:c-format */ + sprintf (errbuf, _("bad instruction `%.50s'"), start); + } + *errmsg = errbuf; return NULL; } } - -#if 0 /* This calls back to GAS which we can't do without care. */ - -/* Record each member of OPVALS in the assembler's symbol table. - This lets GAS parse registers for us. - ??? Interesting idea but not currently used. */ - -/* Record each member of OPVALS in the assembler's symbol table. - FIXME: Not currently used. */ - -void -frv_cgen_asm_hash_keywords (CGEN_CPU_DESC cd, CGEN_KEYWORD *opvals) -{ - CGEN_KEYWORD_SEARCH search = cgen_keyword_search_init (opvals, NULL); - const CGEN_KEYWORD_ENTRY * ke; - - while ((ke = cgen_keyword_search_next (& search)) != NULL) - { -#if 0 /* Unnecessary, should be done in the search routine. */ - if (! frv_cgen_opval_supported (ke)) - continue; -#endif - cgen_asm_record_register (cd, ke->name, ke->value); - } -} - -#endif /* 0 */