X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Frecog.h;h=f2b1f6e44048c3142d4ebd2fb2b52a39fab9119b;hb=8d40ea4504ee85e1a6b73103edb1776141d5d22e;hp=a7e22e6e349b0136b76a0d697492890cea7db47d;hpb=e9ff93b1e1540dfd1f609a92dfa66c27c673abfa;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/recog.h b/gcc/recog.h index a7e22e6e349..f2b1f6e4404 100644 --- a/gcc/recog.h +++ b/gcc/recog.h @@ -1,6 +1,6 @@ /* Declarations for interface to insn recognizer and insn-output.c. Copyright (C) 1987, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, - 2005, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GCC. @@ -72,7 +72,7 @@ struct operand_alternative extern void init_recog (void); extern void init_recog_no_volatile (void); extern int check_asm_operands (rtx); -extern int asm_operand_ok (rtx, const char *); +extern int asm_operand_ok (rtx, const char *, const char **); extern bool validate_change (rtx, rtx *, rtx, bool); extern bool validate_unshare_change (rtx, rtx *, rtx, bool); extern bool canonicalize_change_group (rtx insn, rtx x); @@ -87,6 +87,8 @@ extern int constrain_operands_cached (int); extern int memory_address_p (enum machine_mode, rtx); extern int strict_memory_address_p (enum machine_mode, rtx); extern int validate_replace_rtx (rtx, rtx, rtx); +extern int validate_replace_rtx_part (rtx, rtx, rtx *, rtx); +extern int validate_replace_rtx_part_nosimplify (rtx, rtx, rtx *, rtx); extern void validate_replace_rtx_group (rtx, rtx, rtx); extern void validate_replace_src_group (rtx, rtx, rtx); extern bool validate_simplify_insn (rtx insn); @@ -143,6 +145,19 @@ recog_memoized (rtx insn) } #endif +/* Skip chars until the next ',' or the end of the string. This is + useful to skip alternatives in a constraint string. */ +static inline const char * +skip_alternative (const char *p) +{ + const char *r = p; + while (*r != '\0' && *r != ',') + r++; + if (*r == ',') + r++; + return r; +} + /* Nonzero means volatile operands are recognized. */ extern int volatile_ok; @@ -202,6 +217,12 @@ struct recog_data /* The number of alternatives in the constraints for the insn. */ char n_alternatives; + /* Specifies whether an insn alternative is enabled using the + `enabled' attribute in the insn pattern definition. For back + ends not using the `enabled' attribute the array fields are + always set to `true' in expand_insn. */ + bool alternative_enabled_p [MAX_RECOG_ALTERNATIVES]; + /* In case we are caching, hold insn data was generated for. */ rtx insn; };